一、基本组件
1、ResourceManager
-
ResourceManager是master上的进程,负责整个分布式系统的资源管理和调度。
-
他会处理来自client端的请求(包括提交作业/杀死作业);
-
启动/监控Application Master;
-
监控NodeManager的情况,比如可能挂掉的NodeManager。
2、NodeManager
-
相对应的,NodeManager时处在slave节点上的进程,他只负责当前slave节点的资源管理和调度,以及task的运行。
-
他会定期向ResourceManager汇报资源/Container的情况(heartbeat);
-
接受来自ResourceManager对于Container的启停命令。
3、Application Master
-
每一个提交到集群的作业(Job)都会有一个与之对应的Application Master来负责应用程序的管理。
-
他负责进行数据切分;
-
为当前应用程序向ResourceManager去申请资源(也就是Container),并分配给具体的任务;
-
与NodeManager通信,用来启停具体的任务,任务运行在Container中;
-
而任务的监控和容错也是由Application Master来负责的。
4、Container
它包含了Application Master向ResourceManager申请的计算资源,比如说CPU/内存的大小,以及任务运行所需的环境变量和队任务运行情况的描述。
二、作业执行流程
(1)、Client向ResourceManager提交作业(可以是Spark/Mapreduce作业)
(2)、ResourceManager会为这个作业分配一个container
(3)、ResourceManager与NodeManager通信,要求NodeManger在刚刚分配好的container上启动应用程序的Application Master
(4)、Application Master先去向ResourceManager注册,而后ResourceManager会为各个任务申请资源,并监控运行情况
(5)、Application Master采用轮询(polling)方式向ResourceManager申请并领取资源(通过RPC协议通信)
(6)、Application Manager申请到了资源以后,就和NodeManager通信,要求NodeManager启动任务
(7)最后,NodeManger启动作业对应的任务。