Yarn简介

  • Post author:
  • Post category:其他


1.基本架构

Yarn是一个资源调度平台,负责为运算程序提供服务器运算资源,相当于一个分布式的操作系统平台,而MapReduce等运算程序相当于操作系统上的应用程序


YARN


主要由


ResourceManager





NodeManager





ApplicationMaster





Container


等组件构成,如下图

ResouceManager:

  1. 处理客户端请求
  2. 监控NodeManger
  3. 启动或监控ApplictionMaster
  4. 资源的分配和调度

ResourceManager由Scheduler和ApplicationManager(注意不是ApplicationMaster)组成;

Scheduler: 对各个任务及队列分配资源,没有监控及对任务状态的追踪,同时也不保证对失败的任务进行重试

ApplicationManager: 接受提交的任务,协调第一个用于启动ApplicationMaster的container,同时针对ApplicationMaster的失败提供重试

ApplicationMaster:从Scheduler请求合适的资源containers,追踪状态及监控进度

NodeManager:

  1. 管理单个节点上的资源
  2. 处理来自ResourceManger的命令
  3. 处理来自ApplictionMaster的命令

Application Master:

ApplicationMaster是应用级别的,它的主要功能就是向

ResourceManager

(全局的)申请计算资源(Containers)并且和NodeManager交互来执行和监控具体的task

  1. 负责数据的切分
  2. 为应用程序申请资源并分配给内部任务
  3. 任务的监控和容错

Container:

  1. Container是yarn中的资源抽象,它封装了某个节点上的多维度资源,如内存,网络,磁盘,cpu


参考官方文档

2.作业提交全过程

作业提交全过程详解

(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会清理工作状态。作业的信息会被作业历史服务器存储以备之后用户核查。

3.资源调度器


目前,


Hadoop


作业调度器主要有三种:


FIFO





Capacity Scheduler





Fair Scheduler





Hadoop2.7.2


默认的资源调度器是


Capacity Scheduler


具体设置详见:


yarn-default.xml


文件

<property>
    <description>The class to use as the resource scheduler.</description>
    <name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

3.1先进先出调度器(FIFO)

3.2容量调度器(Capacity Scheduler)


官网文档

笔者理解为每个队列保证FI job有足够资源的基础上再执行下一个job

3.3公平调度器(Fair Scheduler)


官网文档

笔者理解为每个队列保证每个job能够均匀的得到资源

4.任务的推测执行

4.1任务完成时间

作业完成时间取决于最慢的任务完成时间

一个作业由若干个Map任务和Reduce任务构成。因硬件老化、软件Bug等,某些任务可能运行非常慢。

思考:系统中有99%的Map任务都完成了,只有少数几个Map老是进度很慢,完不成,怎么办?

4.2推测执行机制

发现拖后腿的任务,比如某个任务运行速度远慢于任务平均速度。为拖后腿任务启动一个备份任务,同时运行。谁先运行完,则采用谁的结果。

4.3执行推测任务的前提条件

(1)每个Task只能有一个备份任务

(2)当前Job已完成的Task必须不小于0.05(5%)





3




开启推测执行参数设置。mapred-site.xml文件中默认是打开的

<property>
  	<name>mapreduce.map.speculative</name>
  	<value>true</value>
  	<description>If true, then multiple instances of some map tasks may be executed in parallel.</description>
</property>

<property>
  	<name>mapreduce.reduce.speculative</name>
  	<value>true</value>
  	<description>If true, then multiple instances of some reduce tasks may be executed in parallel.</description>
</property>

4.4不能启用推测执行机制情况

(1)任务间存在严重的负载倾斜;

(2)特殊任务,比如任务向数据库中写数据

4.5算法原理

5.ResourceManager HA


参考文档



版权声明:本文为u012485099原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。