yarn资源调度器

Posted 道源趣谈

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了yarn资源调度器相关的知识,希望对你有一定的参考价值。

加“星标★”,每天早晨08:35,好文必达

1.yarn 介绍

将hadoop理解为整个操作系统,那么hdfs就是操作系统中的磁盘文件存储系统,mapreduce就是运行在系统上的应用,而yarn则是在系统中负责资源调度的,为运行的应用分配相应的系统资源

2.yarn整体架构

yarn包括ResourceManage(主管)、ApplicationMaster(小组负责人)、NodeManager(员工)、Container(小秘)

图片

ResourceManage负责接收外部需求,并加需求分配给ApplicationMaster或者直接分配给NodeManager,ApplicationMaster接到需求后,进行切分,然后将任务分配给NodeManager去完成,NodeManager接收到任务后,开始向Container申请所需要的资源

每一个Applicationmaster对应一个job,用来监控job执行进度

3.yarn运行机制

yarn资源调度器
图片

MapReduce程序提交给Yarn执行的过程

运行工作机制详细步骤:

  1. Job提交MapReduce程序
job.waitForCompletion(true);
  1. 然后通过yarnRunner向ResourceManager申请一个job,ResourceManager返回一个jobId
JobID jobId = submitClient.getNewJobID();

3)有了jobId后,就可以在HDFS上申请资源,生成一个运行job的临时目录,用来存放运行job所需要的相关资源,比如:切片信息,job任务信息,mapreduce程序jar等

Path submitJobDir = new Path(jobStagingArea, jobId.toString());copyAndConfigureFiles(job, submitJobDir);// Write job file to submit dirwriteConf(conf, submitJobFile);

4)job运行所需相关资源提交完后,向ResourceManager申请运行job,也就是MrAppMaster

// Now, actually submit the job (using the submit name)//printTokens(jobId, job.getCredentials());status = submitClient.submitJob( jobId, submitJobDir.toString(), job.getCredentials());
  1. Resourcemanager 接收到运行job的申请后,会创建一个task,并将task放入队列中,等待执行 6)当轮到指定Task执行,则Yarn则会分配一个相应的NodeManager来执行这个Task

7)NodeManager就会创建一个容器Container用来运行MRAppMaster,MRAppMaster就是用来管理MapReducer运行程序的,此时该NodManager中包含的是MRAppMaster

8)MrAppMaster出现后就从hdfs中的job临时目录下载相关的资源,比如切片信息

  1. MrAppMaster下载好相关资源,就会根据切片信息,想ResourceManager申请MapTask容器

10)ResourceManager接收到MrAppMaster的申请后,会创建相应切片数的MapTask

11)当轮到对应的MapTask后,Yarn就会分配相应的NodeManager来执行MapTask

  1. NodeManager就会创建Container容器来运行MapTask

  2. MRAppMaster会将执行脚本发送到要执行MapTask的NodeManager节点上,并不断询问任务执行进度

14)当MapTask都执行完了,MrAppMaster就会开始根据指定的Reduce任务数向ResourceManager申请运行ReduceTask

15 )ResouceManager又将ReduceTask放入队列,等待执行

16)当轮到对应的ReduceTask任务执行,yarn就会分配相应的NodeManager节点来执行ReduceTask

  1. NodeManager就会创建Container容器来运行ReduceTask

18 ) MrAppMaster将MapTask生成的文件发送给ReduceTaks进行计算,

19)MrAppMaster不断循环ReduceTasks任务执行的进度,当执行完毕,就会将文件都上传到hdfs上

20)当结果文件都上传到HDFS上后,相应的Container就会被回收,同样MrAppMaster也没什么事了,就会向ResourceManager申请注销自己

整个MapReduce的任务执行都是由MrAppMaster来管理的,实际MrAppMaster也是ResourceManager中创建的一个任务,需要等待相应的NodeManager来领取执行,而MrAppMaster在执行MapReduce任务时,需要向ResourceManager申请执行相应的job,ResourceManager又会将这个申请初始化为一个task放到队列中,等待NodeManager来执行

4.资源调度器

目前,Hadoop作业调度器主要有三种:FIFO、Capacity Scheduler和Fair Scheduler。Hadoop2.7.2默认的资源调度器是Capacity Scheduler

具体的配置可以在hadoop-yarn-common.jar包下的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>

4.1.先进先出调度器(FIFO)

yarn资源调度器
图片

4.2.容量调度器(Capacity Scheduler)

yarn资源调度器
图片
yarn资源调度器
图片

4.3.公平调度器(Fair Scheduler)

yarn资源调度器
图片

5.任务的推测执行

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

执行推测任务的前提条件

(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>

不能启用推测执行机制情况    (1)任务间存在严重的负载倾斜;

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

图片

推荐阅读





扫码订阅,精彩在线看

如有收获,点个在看,诚挚感谢


以上是关于yarn资源调度器的主要内容,如果未能解决你的问题,请参考以下文章

[Hadoop]-Yarn-调度器篇

Yarn资源调度器

大数据技术之Hadoop(Yarn)资源调度器案例实操

大数据技术之Hadoop(Yarn)资源调度器案例实操

Yarn资源调度器的选择

yarn资源调度器