一.概述
1.YARN(Yet Another Resource Negotiator - 迄今另一个资源调度器) - 负责任务管理和资源调度
2.YARN是Hadoop2.X开始出现的,也是Hadoop2.X中最重要的特性之一。也正是因为YARN的出现,导致Hadoop1.X和Hadoop2.X不兼容
3.产生原因
a.内部原因
①在Hadoop1.X中,没有Yarn的说法,此时MapReduce分为主进程JobTracker和从进程TaskTracker。JobTracker只允许存在1个,容易出现单点故障
②JobTracker负责对外接收任务,接收任务之后需要将任务拆分成子任务(MapTask和ReduceTask)。JobTracker拆分完任务之后,将子任务分配给进程TaskTracker。JobTracker会监控每一个TaskTracker的执行情况。在官方文档中,每一个JobTracker最多能够管理4000个TaskTracker。如果TaskTracker数量过多,导致JobTracker的效率成倍下降,甚至导致JobTracker的崩溃
b.外部原因
①在Hadoop产生的时候,市面上并没有太多的大数据框架,因此Hadoop在刚开 始涉及的时候,只考虑MapReduce的资源调度问题
②后来随着大数据的发展,产生了越来越多的计算框架,很大一部分的框架都是围绕Hadoop使用,因为Hadoop没有考虑其他框架的资源冲突
4.YARN的结构
a.主进程ResourceManager
①负责对外接受请求
②负责管理NodeManager
③负责管理ApplicationMaster
b.从进程NodeManager
①执行任务
②负责管理本节点上的资源
c.辅助进程ApplicationMaster:负责管理具体的子任务
二.流程
1.当ResourceManager收到客户端提交的任务之后,会先将这个任务临时存储下来,等待NodeManager的心跳
2.当ResourceManager收到NodeManager的心跳之后,会在心跳响应中将Job任务返回给NodeManager
3.NodeManager通过心跳响应之后,收到任务之后,就会在本节点内部开启一个ApplicationMaster进程,然后将Job任务交给这个ApplicationMaster处理
4.Applicationmaster收到任务之后,会将Job任务来进行拆分,拆分成子任务。例如,如果是一个MapReduce程序,那么拆分成MapTask和ReduceTask
5.拆分完成之后,ApplicationMaster会给ResourceManager发送请求申请资源
6.ResourceManager收到请求之后,将请求交给内部组件ResourceScheduler处理
7.ResourceScheduler收到请求之后,会将资源的描述封装成一个Container对象返回给ApplicationMaster
8.ApplicationMaster收到资源之后,会对资源进行二次拆分,分配给具体的子任务,然后将子任务分配到不同的NodeManager上执行,并且ApplicationMaster还会监控这些子任务执行
9.如果子任务执行失败,那么ApplicationMaster监控到之后,会自动的重启这个失败的子任务,或者会自动的将失败的子任务分配到其他的节点上重新执行
10.当Job任务结束之后,ApplicationMaster会ResourceManager发送请求,请求注销自己
三.ResourceScheduler - 资源调度器
1.在Hadoop中,目前为止,支持3种资源调度器:FIFO(先进先出),Capacity(资源容量)以及Fair(公平)
2.FIFO(先进先出)
a.在Hadoop2.X中,默认使用是这个资源调度器,但是Hadoop3.X发生变化
b.底层会为维系唯一的队列,任务会先进入队列,然后从队列头获取任务,为这个任务分配资源。如果资源不充分的情况下,后入队的任务就会被阻塞
3.Capacity(资源容量)
a.在Hadoop3.X中,默认使用的是这个资源调度器
b.这个资源调度器中,可以维系多个队列,每一个队列维系FIFO的规则。默认情况下,这个调度器中只有1个队列default(此时和FIFO一样)
c.如果资源调度器中维系了多个队列,那么可以为每一个队