文章目录
一、Yarn基本定义
-
Yarn是一个资源调度平台
,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台
,而MapReduce等运算程序则相当于运行于操作系统之上的应用程序
。
返回顶部
二、Yarn基本架构
- YARN主要由
ResourceManager
、NodeManager
、ApplicationMaster
和Container
等组件构成 -
RM
主要处理客户端的请求,监控其下的NM,每个NM上都会运行job,每个job相对应的会有App Mstr,根据其具体情况进行资源的分配与调度。 -
NM
主要管理单节点上的数据资源,听从于RM的命令,同时处理App Mstr的命令。 -
App Mstr
主要负责数据切分,根据切片信息决定开启多少个MapTask;为应用程序申请资源并分配给内部的任务,同时对任务进行监控、容错。 -
Container
是yarn中资源的抽象,封装了某个节点上的多维度资源,如:内存、CPU、磁盘、网络等。
返回顶部
三、Yarn工作机制
① MapReduce程序提交到客户端所在的节点
。
② YarnRunner向ResourceManager申请一个Application
。
③ ResourceManager将
该应用程序的资源路径返回给YarnRunner
。
④ 该程序将运行所需资源提交到HDFS
上。
⑤ 程序资源提交完毕后,申请运行MRAppMaster
,等待FIFO调度对列(先进先出,等待RM上其他Task运行完毕)。
⑥ ResourceManager将用户的请求初始化成一个Task
。
⑦ 其中一个NodeManager领取到Task任务
。
⑧ 该NodeManager创建容器Container
,并产生MRAppmaster
。
⑨ Container从HDFS上拷贝资源到本地
。
⑩ MRAppmaster
读取切片信息并向 ResourceManager 申请运行MapTask资源
。
⑪ ResourceManager将运行MapTask任务分配给另外两个NodeManager,另两个NodeManager分别领取任务并创建容器。
⑫ MRAppmaster向两个接收到任务的NodeManager发送程序启动脚本,这两个NodeManager分别启动MapTask,MapTask对数据分区排序。
⑬ 等待所有MapTask运行完毕后
,MRAppMaster 向 ResourceManager 申请容器,运行ReduceTask
。
⑭ ReduceTask 从 MapTask 拷贝获取相应分区的数据进行运算。
⑮ 程序运行完毕后,MapReduce 会向 ResourceManager 申请注销自己。
返回顶部
四、作业提交流程(Job)
(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会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。
返回顶部
五、资源调度器
目前,Hadoop作业调度器主要有三种:FIFO
、Capacity Scheduler
和 Fair Scheduler
。Hadoop2.7.2默认的资源调度器是Capacity Scheduler。
- 具体设置详见:yarn-default.xml文件
• FIFO ---- 先进先出(对列)
• Capacity Scheduler(容量调度器) ---- 多个FIFO组合
• Fair Scheduler(公平调度器)
返回顶部
六、任务推测执行
1.作业完成时间取决于最慢的任务完成时间
- 一个作业由若干个Map任务和Reduce任务构成。因硬件老化、软件Bug等,某些任务可能运行非常慢。
思考:系统中有99%的Map任务都完成了,只有少数几个Map老是进度很慢,完不成,怎么办?启用备份任务。
2.推测执行机制
- 发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度。
为拖后腿任务启动一个备份任务,同时运行。谁先运行完,则采用谁的结果
。
3.执行推测任务的前提条件
- (1)
每个Task只能有一个备份任务
- (2)
当前Job已完成的Task必须不小于0.05(5%)
- (3)
开启推测执行参数设置
, mapred-site.xml
4.不能启用推测执行机制情况
- (1)
任务间存在严重的负载倾斜
; - (2)
特殊任务,比如:任务向数据库中写数据
。
5.算法原理
- 差值越大,备份任务完成的时间越短,功效越高!!!
返回顶部