Yarn提交mr的流程
第一步
:
客户端提交运行一个
MR
的程序给
Yarn
集群
, Yarn
主节点首先会先检查提交任务请求是否
OK
第二步
:
如果
OK, RM
会随机选择一台
NodeManager,
启动这个任务对应的一个管理者
:
AppMaster(
一个任务一个
AppMaster)
第三步
:
AppMaster
进行启动
,
启动后会和
RM
进行汇报
,
已经启动成功了
,
同时也会和主节点简历心跳包
第四步
:
AppMaster
开始进行资源的申请
,
根据任务的对应资源要求
,
向
RM
申请资源
,
通过心跳包的形式
,
将需要申请资
源信息发送给
RM
第五步
:
RM
接收到资源申请的信息后
,
将这个资源申请交给其底层的资源调度器
(FIFO
容量 公平
),
来负责完整资源的分
配工作
,
如果当前没有资源
,
那么就需要等待即可
,
如果有资源
,
就会立即分配好
,
等待
AppMaster
来拉取
第六步
:
AppMaster
会不断的询问
RM(
心跳
),
是否已经准备好资源
,
如果发现已经准备好资源
,
那么就会立即拉取过来
第七步
:
AppMaster
会根据资源信息
(
资源信息会采用
container
容器的方式返回
),
连接对应的
nodeManager,
开始进
行任务的分配
第八步
:
将任务分配给对应的
nodemanager
进行执行操作
, nodemanager
收到任务后
,
占用相关的资源
,
启动运行
,
同
时一旦占用资源后
,
后续
nodemanager
汇报的时候
,
就会告知
RM
资源已经被占用了
第九步
:
AppMaster
不断的监听各个
NN
是否已经执行完成
,
如果
MapTask
全部都执行完成后
,
就会通知
ReduceTask
可以
拉取数据
,
完成
reduceTask
的运行操作
第十步
:
当所有的
Task
全部都执行完成后
, AppMaster
就会通知给
RM
任务以及执行完成
, RM
回收资源
,
通知
AppMaster
可以关闭了
Yarn的三种调度方案
1- FIFO Scheduler(
先金先出调度器
)
:
只有一个队列
,
将所有的提交任务全部放置在一个队列中
,
根据提交的顺序
, 依次的分配资源进行运行操作
好处
:
配置简单
弊端
:
不合适共享集群
,
因为大的应用会直接将所有的资源全部都拿到了
,
导致后续的其他的任务无法运行
2- Capacity Scheduler(
容量调度器
)
:
可以对资源进行划分
,
形成多个队列
,
不同队列管理不同范围资源
,
比如说
, 分配队列,
分别管理
30% 50% 20%
资源
,
这样可以让不同任务
,
放置到不同队列中
,
既可以保证大任务运行
,
也可以让小任务有资源可用
好处
:
多队列
,
可以多任务的运行
,
可以进行资源的划分
弊端
:
如果是一个庞大的任务
,
是无法拿到全部的资源
,
虽然支持资源抢占
,
但是存在一定抢占比例
注意
:
此调度器是
Apache
版本的
Hadoop
默认使用的
3- Fair Scheduler(
公平调度器
)
:
使用公平调度器,
不需要预留一定的资源
,
因为调度器会在所有运行的作业中进行 动态平衡,
当第一个大的任务运行的时候
,
公平调度器可以将全部的资源分配给第一个任务
,
当第二个大的任务过来后
,
会要求第一个任务释放出50%
的资源
,
交给第二个任务来进行运行
,
当第二个任务运行完成后
,
会将资源在归还给第一个任务
好处
:
可以让大的任务使用全部的资源
,
同时也可以满足其他的任务也可以有资源运行
弊端
:
如果任务比较多
,
会导致大任务迟迟无法结束
,
因为资源一直被其他的任务在使用中
注意
:
此调度器是CDH
版本的
Hadoop
默认使用的