Mapreduce学习(二)——mr程序提交的流程+yarn框架的资源调度

上篇文章简单写了一个mr程序并且提交至咱们的集群中运行。这篇文章给大家带来mr具体的流程以及进程的变化过程

我们运行sh.start-all.sh 时进程会出现 

其中DataNode、NameNode、SecondaryNameNode属于HDFS的进程用于管理文件存储

ResourceManager(下面称RM)和NodeManager(下面称NM)属于yarn框架的进程

一、提交job

1)运行job的jar文件:hadoop jar xxx.xx.xx.WordCountRunner

这个main方法中最后一步提交job至集群:job.waitForCompletion()方法这个时候进程会出现一个RunJar的进程

 

2)RunJar向RM申请执行一个job,RM会返回job相关资源以及jobID

3)RunJar会将这些资源提交至HDFS并且将提交结果信息返回RM

4)RM将job添加至job队列中

二、初始化

1)RM初始化job任务

2)NM从RM领取job

3)NM分配资源容器(包括IO资源、磁盘资源、网络资源、内存资源等等)

三、mapreduce

1)RM在某个NM节点上启动MRAppMaster(mr主要进程)

2)master向RM注册job

3)master给其他NM上分配MapTask从而产生yarnChild(进行map计算)

4)map计算结束之后将结果给reduce的NM节点进行分析整合

5)将结果写入HDFS

6)master向RM注销自己结束进程

下一篇文章(周日发布)将会带来如何在本地DEBUG 调试Mapreduce程序

 

本人QQ/Wechat:806751350

github地址:https://github.com/linminlm

### MapReduce 1.0 架构的缺陷及问题分析 MapReduce 1.0 是一种分布式计算框架,同时也充当资源管理和任务调度的角色。然而,随着大数据技术的发展和应用场景的复杂化,MapReduce 1.0 显现出了一些固有的局限性和不足之处。 #### 资源管理单一 在 MapReduce 1.0 中,JobTracker 同时负责集群中的资源分配、任务调度以及状态监控等多个职责。这种集中式的管理模式使得 JobTracker 成为整个系统的单点瓶颈,当集群规模增大时,JobTracker 的负载会显著增加,从而影响整体性能[^1]。 #### 扩展性差 由于 JobTracker 需要跟踪所有的任务执行情况并维护全局的状态信息,因此它的扩展能力受到很大限制。一旦集群节点数量超过一定阈值,JobTracker 就可能因为内存消耗过大或者网络通信开销过高而导致系统崩溃[^3]。 #### 缺乏灵活性 另一个重要问题是,MapReduce 1.0 只能支持特定类型的批处理作业——即基于 Map 和 Reduce 两阶段的操作模式。对于其他形式的工作流(如实时流处理或迭代型算法),该架构显得力不从心。此外,它无法与其他非 MapReduce 类型的应用程序共享硬件资源[^4]。 #### 容错机制不够完善 尽管 MapReduce 设计之初就考虑到了失败重试等功能,但在大规模环境下仍然存在改进空间。例如 TaskTracker 如果发生故障,则其所承载的任务都需要重新安排;而且每次启动新实例都会带来额外的时间成本。 综上所述,上述提到的各种因素共同构成了推动下一代计算平台 YARN 出现的主要动力之一 。通过引入更加模块化的架构设计理念 ,不仅解决了原有版本中存在的诸多弊端 ,也为未来更多样化的应用需求奠定了坚实基础 。 ```python # 示例代码展示如何简单模拟一个 map reduce 过程 (仅用于理解概念,并不代表实际 MR 实现) def mapper(data): results = [] for line in data.split("\n"): words = line.strip().split() for word in words: results.append((word, 1)) return results def reducer(key_value_pairs): counts = {} for key, value in key_value_pairs: if key not in counts: counts[key] = 0 counts[key] += int(value) return list(counts.items()) data_input = """hello world\nthis is a test\nhello again""" intermediate_results = mapper(data_input) final_output = reducer(intermediate_results) print(final_output) ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值