YARN资源调度知识概要
一,Yarn架构
ResourceManager(rm)
:
处理客户端请求、启动
/
监控
ApplicationMaster
、监控
NodeManager
、资源分配与调度;
NodeManager(nm)
:
单个节点上的资源管理、处理来自
ResourceManager
的命令、处理来自ApplicationMaster的命令;
ApplicationMaster(am)
:
数据切分、为应用程序申请资源,并分配给内部任务、任务监控与容错。
Container
:
对任务运行环境的抽象,封装了
CPU
、内存等多维资源以及环境变量、启动命令等任务运行相关的信息。
二,工作机制
作业提交过程之YARN
作业提交
第
1
步:
Client
调用
job.waitForCompletion
方法,向整个集群提交
MapReduce
作业。
第
2
步:
Client
向
RM
申请一个作业
id
。
第
3
步:
RM
给
Client
返回该
job
资源的提交路径和作业
id
。
第
4
步:
Client
提交
jar
包、切片信息和配置文件到指定的资源提交路径。
第
5
步:
Client
提交完资源后,向
RM
申请运行
MrAppMaster
。
作业初始化
第
6
步:当
RM
收到
Client
的请求后,将该
job
添加到容量调度器中。
第
7
步:某一个空闲的
NM
领取到该
Job
。
第
8
步:该
NM
创建
Container
,并产生
MRAppmaster
。
第
9
步:下载
Client
提交的资源到本地。
任务分配
第
10
步:
MrAppMaster
向
RM
申请运行多个
MapTask
任务资源。
第
11
步:
RM
将运行
MapTask
任务分配给另外两个
NodeManager
,另两个
NodeManager
分
别领取任务并创建容器。
任务运行
第
12
步:
MR
向两个接收到任务的
NodeManager
发送程序启动脚本,这两个
NodeManager
分别启动
MapTask
,
MapTask
对数据分区排序。
第
13
步:
MrAppMaster
等待所有
MapTask
运行完毕后,向
RM
申请容器,运行
ReduceTask
。
第
14
步:
ReduceTask
向
MapTask
获取相应分区的数据。
第
15
步:程序运行完毕后,
MR
会向
RM
申请注销自己。
进度和状态更新
YARN
中的任务将其进度和状态返回给应用管理器
,
客户端每秒
(
通过mapreduce.client.progressmonitor.pollinterval设置
)
向应用管理器请求进度更新
,
展示给用户。
作业完成
除了向应用管理器请求作业进度外
,
客户端每
5
秒都会通过调用
waitForCompletion()
来检查作业是否完成。时间间隔可以通过mapreduce.client.completion.pollinterval
来设置。作业完成之后,
应用管理器和
Container
会清理工作状态。作业的信息会被作业历史服务器存储以备 之后用户核查。
三,yarn的调度策略
Hadoop
作业调度器主要有三种:
FIFO
、
Capacity Scheduler
和
Fair Scheduler
。
Hadoop2.9.2
默认的资源调度器是Capacity Scheduler
。
Fair Scheduler
(公平调度器,
CDH版本的hadoop
默认使用的调度器)Fair调度器的设计目标是为所有的应用分配公平的资源(对公平的定义可以通过参数来设置)。公平调度在也可以在多个队列间工作。举个例子,假设有两个用户A
和
B
,他们分别拥有一个队列。当A
启动一个
job
而
B
没有任务时,
A
会获得全部集群资源;当
B
启动一个
job
后,
A
的
job
会继续运 行,不过一会儿之后两个任务会各自获得一半的集群资源。如果此时B
再启动第二个
job
并且其它job还在运行,则它将会和
B
的第一个
job
共享
B
这个队列的资源,也就是
B
的两个
job
会用于四分之一的集群资源,而A
的
job
仍然用于集群一半的资源,结果就是资源最终在两个用户之间平等的共享。
四,
Yarn
多租户资源隔离配置