Yarn
资源调度器
思考:
1
)如何管理集群资源?
2
)如何给任务合理分配资源?
Yarn
是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式
的
操作系统平台
,而
MapReduce
等运算程序则相当于运行于
操作系统之上的应用程序。
Yarn
基础架构
YARN
主要由
ResourceManager
、
NodeManager
、
ApplicationMaster
和
Container
等组件
构成
1.2 Yarn 工作机制
(
1
)
MR
程序提交到客户端所在的节点。
(2)
YarnRunner
向
ResourceManager
申请一个
Application
。
(3)
RM
将该应用程序的资源路径返回给
YarnRunner
。
(4)该程序将运行所需资源提交到
HDFS
上。
(5)程序资源提交完毕后,申请运行
mrAppMaster
。
(6)
RM
将用户的请求初始化成一个
Task
。
(7)其中一个
NodeManager
领取到
Task
任务。
(8)该
NodeManager
创建容器
Container
,并产生
MRAppmaster
。
(9)
Container
从
HDFS
上拷贝资源到本地。
(
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
申请注销自己。
作业提交全过程
作业提交全过程详解
(
1
)作业提交
第
1
步:
Client
调用
job.waitForCompletion
方法,向整个集群提交
MapReduce
作业。
第
2
步:
Client
向
RM
申请一个作业
id
。
第
3
步:
RM
给
Client
返回该
job
资源的提交路径和作业
id
。
第
4
步:
Client
提交
jar
包、切片信息和配置文件到指定的资源提交路径。
第
5
步:
Client
提交完资源后,向
RM
申请运行
MrAppMaster
。
(2)作业初始化
第
6
步:当
RM
收到
Client
的请求后,将该
job
添加到容量调度器中。
第
7
步:某一个空闲的
NM
领取到该
Job
。
第
8
步:该
NM
创建
Container
,并产生
MRAppmaster
。
第
9
步:下载
Client
提交的资源到本地。
(3)任务分配
第
10
步:
MrAppMaster
向
RM
申请运行多个
MapTask
任务资源。
第
11
步:
RM
将运行
MapTask
任务分配给另外两个
NodeManager
,另两个
NodeManager
分别领取任务并创建容器。
(4)任务运行
第
12
步:
MR
向两个接收到任务的
NodeManager
发送程序启动脚本,这两个
NodeManager
分别启动
MapTask
,
MapTask
对数据分区排序。
第
13
步:
MrAppMaster
等待所有
MapTask
运行完毕后,向
RM
申请容器,运行
ReduceTask
。
第
14
步:
ReduceTask
向
MapTask
获取相应分区的数据。
第
15
步:程序运行完毕后,
MR
会向
RM
申请注销自己。
(5)进度和状态更新
YARN
中的任务将其进度和状态
(
包括
counter)
返回给应用管理器
,
客户端每秒
(
通过
mapreduce.client.progressmonitor.pollinterval
设置
)
向应用管理器请求进度更新
,
展示给用户。
(6)作业完成
除了向应用管理器请求作业进度外
,
客户端每
5
秒都会通过调用
waitForCompletion()
来
检查作业是否完成。时间间隔可以通过
mapreduce.client.completion.pollinterval
来设置。作业
完成之后
,
应用管理器和
Container
会清理工作状态。作业的信息会被作业历史服务器存储
以备之后用户核查。
Yarn
调度器和调度算法
目前,
Hadoop
作业调度器主要有三种:
FIFO
、容量(
Capacity Scheduler
)和公平(
Fair
Scheduler
)。
Apache Hadoop3.1.3
默认的资源调度器是
Capacity Scheduler
。
CDH
框架默认调度器是
Fair Scheduler
。
具体设置详见:
yarn-default.xml
文件
先进先出调度器(FIFO)
FIFO 调度器(First In First Out):单队列,根据提交作业的先后顺序,先来先服务。
优点:简单易懂;
缺点:不支持多队列,生产环境很少使用;
容量调度器(
Capacity Scheduler
)
Capacity Scheduler 是 Yahoo 开发的多用户调度器。
公平调度器(Fair Scheduler)
Fair Schedulere 是 Facebook 开发的多用户调度器。
Yarn 常用命令
Yarn
状态的查询,除了可以在
hadoop103:8088
页面查看外,还可以通过命令操作。常
见的命令操作如下所示:
需求:执行
WordCount
案例,并用
Yarn
命令查看任务运行情况。
yarn application 查看任务
(
1
)列出所有
Application
:
(2)根据
Application
状态过滤:
yarn application -list -appStates
(所有状态:
ALL
、
NEW
、
NEW_SAVING
、
SUBMITTED
、
ACCEPTED
、
RUNNING
、
FINISHED
、
FAILED
、
KILLED
)
(3)
Kill
掉
Application
:
yarn logs 查看日志
(
1
)查询
Application
日志:
yarn logs -applicationId <ApplicationId>
[atguigu@hadoop102 hadoop-3.1.3]$
yarn logs
-applicationId
application_1612577921195_0001
(2)查询
Container
日志:
yarn logs -applicationId <ApplicationId> -containerId <ContainerId>
[atguigu@hadoop102 hadoop-3.1.3]$
yarn logs
-applicationId
application_1612577921195_0001
-containerId
container_1612577921195_0001_01_000001
yarn applicationattempt
查看尝试运行的任务
(
1
)列出所有
Application
尝试的列表:
yarn applicationattempt -list <ApplicationId>
(2)打印
ApplicationAttemp
状态:
yarn applicationattempt -status <ApplicationAttemptId>
yarn container 查看容器
(
1
)列出所有
Container
:
yarn container -list <ApplicationAttemptId>
(2)打印
Container
状态:
yarn container -status <ContainerId>
yarn node 查看节点状态
列出所有节点:
yarn node -list -all
yarn rmadmin 更新配置
yarn queue
查看队列
打印队列信息:yarn queue -status <QueueName>
Yarn 生产环境核心参数
Yarn
案例实操
注:调整下列参数之前尽量拍摄
Linux
快照,否则后续的案例,还需要重写准备集群。