在
MR
程序运⾏时,有五个独⽴的进程:
1. YarnRunner:⽤于提交作业的客户端程序
2.ResourceManager:yarn资源管理器,负责协调集群上计算机资源的分配
3. NodeManager:yarn节点管理器,负责启动和监视集群中机器上的计算容器 (container
)
4.Application Master:负责协调运⾏
MapReduce
作业的任务,他和任务都在容器中运⾏,这些容由资源管理器分配并由节点管理器进⾏管理。
5.HDFS:⽤于共享作业所需⽂件。
1
.
调⽤
waitForCompletion
⽅法每秒轮询作业的进度,内部封装了
submit()
⽅法,⽤于创建JobCommiter
实例,并且调⽤其的
submitJobInternal
⽅法。提交成 功后,如果有状态改变,就会把进度报告到控制台。错误也会报告到 控制台
2
. JobCommiter
实例会向
ResourceManager
申请⼀个新应⽤
ID
,⽤于
MapReduce 作业ID
。这期间
JobCommiter
也会进⾏检查输出路径的情况,以及计算输⼊分⽚。
3.
如果成功申请到
ID,
就会将运⾏作业所需要的资源(包括作业
jar
⽂件,配置⽂件和 计算所得的输⼊分⽚元数据⽂件)上传到⼀个⽤ID命名的⽬录下的
HDFS
上。此时副本个数默认是10.
4
.
准备⼯作已经做好,再通知
ResourceManager
调⽤
submitApplication
⽅法提交作业。
5
. ResourceManager
调⽤
submitApplication
⽅法后,会通知
Yarn
调度器 (Scheduler
),调度器分配⼀个容器,在节点管理器的管理下在容器中启动 application master进程。
6
. application master
的主类是
MRAppMaster
,其主要作⽤是初始化任务,并接 受来⾃任务的进度和完成报告。
7
.
然后从
HDFS
上接受资源,主要是
split
。然后为每⼀个
split
创建
MapTask
以及参 数指定的ReduceTask
,任务
ID
在此时分配
8
.
然后
Application Master
会向资源管理器请求容器,⾸先为
MapTask
申请容 器,然后再为ReduceTask
申请容器。(
5%
)
9
.
⼀旦
ResourceManager
中的调度器(
Scheduler
),为
Task
分配了⼀个特定节 点上的容器,Application Master
就会与
NodeManager
进⾏通信来启动容器。
10
.
运⾏任务是由
YarnChild
来执⾏的,运⾏任务前,先将资源本地化(
jar
⽂件,配置⽂件,缓存⽂件)
11
.
然后开始运⾏
MapTask
或
ReduceTask
。
12
.
当收到最后⼀个任务已经完成的通知后,
application master
会把作业状态设 置为success
。然后
Job
轮询时,知道成功完成,就会通知客户端,并把统计信息输出 到控制台