hadoop的Mapreduce运行机制(二)

上一章讲解了hadoop1.0当中MapReduce是如何运行的,但是1.0已经被淘汰了,因为原有框架随着集群规模的扩大,就会暴露出很多问题:

1、首先JobTracker是承担的工作量太大,当随着job数量的增加,内存不够,会造成JobTracker死掉的情况。

2、JobTracker存在单点故障问题,这个任务资源调度节点一死,hadoop就无法正常运行。

3、在TaskTracker端,对于资源的分配是通过task的数目作为参考依据,没有考虑节点的CPU、内存等占用情况,如果两个复杂任务同时调用到同一个TaskTracker端,容易出现节点奔溃情况。

针对hadoop1.0当中MapReduce的缺点,hadoop2.0对MapReduce的运行机制进行重构,引入yarn,它是hadoop集群资源管理器系统。下面我们看下hadoop2.0当中MapReduce是如何运行的,看下官方的流程图一个一个步骤分析:

hadoop的Mapreduce运行机制


名词解析

1、client node:客户端节点,编写Mapreduce程序,并提交程序代码给hadoop。

2、resouce manage node:yarn资源管理器,负责hadoop集群上计算资源的协调。

3、node manage node :yarn节点管理器,负责启动和监控集群中机器上的计算容器(container)

4、MRAppMaster:负责协调运行mapreduce的作业.

5、hdfs:hadoop的分布式文件系统


1.1作业的提交

1、客户端client运行Mapreduce程序,如步骤1。

2、会向yarn资源管理器节点申请一个用于执行Mapreduce的作业ID,如步骤2。

3、然后hadoop会根据作业的输入分片的大小、运行作业的JAR、配置文件等资源以作业ID命名的临时共享目录,保存在HDFS文件系统上,如步骤3.

4、通过yarn资源管理器的submit方法提交作业。如步骤4


1.2、作业的初始化

1、提交完作业,yarn资源管理器就会在节点管理器上分配一个容器(container),用于启动MRAppMaster进程,如步骤5。该进程主要负责协调运行mapreduce的作业,主要监控作业节点的map和reduce的运行状态。并在启动的时候就向yarn资源管理器注册并报告自己的信息。

2、MRAppMaster利用hdfs当中任务ID存储的临时共享目录中的信息对每一个分片创建一个map对象,并通过参数确定reduce的数量,以及确定最终输出的目录和任务输出的临时工作空间。如步骤6。


1.3、作业任务的分配

1、初始化任务完成后,MRAppMaster会向yarn资源管理器申请进行map和reduce任务的资源节点。如步骤8

2、首先是先map任务发出资源申请,直到map任务完成超过5%时,才会为reduce任务申请资源。

3、reduce任务的分配可以分配到各个datanode节点运行,但是map执行时,会优先考虑符合map任务的本地数据节点,减少跨数据节点进行map操作。


1.4、作业任务的执行

       1、MRAppMaster提交申请后,资源管理器为其按需分配资源节点,MRAppMaster就与yarn节点管理器通信来启动容器,如步骤9。

2、该任务由主类YarnChild的一个java应用程序执行。如步骤11。

3、在运行任务之前,会从HDFS的临时共享目录上进行所需资源的本地化。如步骤10。

4、接下来就是运行map和reduce任务。


1.5、作业的完成

当MRAppMaster收到最后一个任务已完成的通知,便把作业的状态设置为成功,并告知yarn资源管理器。


hadoop2.0中Mapreduce优点

1、对比hadoop1.0解决了单点故障问题。由于每一个Mapreduce任务都会生成一个AppMaster进行调度。从而使单点故障不会影响到其它的任务进行。

2、解决了单点压力过大问题,hadoop1.0的压力都在jobtracker身上,现在交于AppMaster进行调度,只有在有任务时,才会启动一个AppMaster,每一个AppMaster都是由集群中资源较为充足的结点进行启动,分散压力,起到负载均衡的作用。

3、完成了任务调度与资源调度的解耦,yarn只做资源调的管理器。任务调用全部交于AppMaster。也为其它计算框架接入hadoop提供了可能性。只需继承AppMaster。