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运行机制
MapReduce程序提交给Yarn执行的过程
运行工作机制详细步骤:
-
Job提交MapReduce程序
job.waitForCompletion(true);
-
然后通过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 dir
writeConf(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());
-
Resourcemanager 接收到运行job的申请后,会创建一个task,并将task放入队列中,等待执行 6)当轮到指定Task执行,则Yarn则会分配一个相应的NodeManager来执行这个Task
7)NodeManager就会创建一个容器Container用来运行MRAppMaster,MRAppMaster就是用来管理MapReducer运行程序的,此时该NodManager中包含的是MRAppMaster
8)MrAppMaster出现后就从hdfs中的job临时目录下载相关的资源,比如切片信息
-
MrAppMaster下载好相关资源,就会根据切片信息,想ResourceManager申请MapTask容器
10)ResourceManager接收到MrAppMaster的申请后,会创建相应切片数的MapTask
11)当轮到对应的MapTask后,Yarn就会分配相应的NodeManager来执行MapTask
-
NodeManager就会创建Container容器来运行MapTask
-
MRAppMaster会将执行脚本发送到要执行MapTask的NodeManager节点上,并不断询问任务执行进度
14)当MapTask都执行完了,MrAppMaster就会开始根据指定的Reduce任务数向ResourceManager申请运行ReduceTask
15 )ResouceManager又将ReduceTask放入队列,等待执行
16)当轮到对应的ReduceTask任务执行,yarn就会分配相应的NodeManager节点来执行ReduceTask
-
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)
4.2.容量调度器(Capacity Scheduler)
4.3.公平调度器(Fair Scheduler)
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资源调度器的主要内容,如果未能解决你的问题,请参考以下文章