Yarn(Yet Another Resource Manager)是Hadoop 2.0版本推出的一款计算资源管理调度框架,用于统一对MapReduce、Hive等大数据计算任务提供资源调度管理服务。
1.为什么需要Yarn
在Hadoop 1.0版本中,MapReduce通过TaskTracker和JobTracker来完成Map/Reduce Task计算程序的分发工作,这使得计算程序的分发和执行耦合,但是在Hadoop 1.0时期并没有产生很大的负面影响。
随着Hadoop的流行,逐渐地Hadoop成为了大数据生态的标准,越来越多的基于Hadoop生态的大数据技术和框架出现,这时开发者发现为了支持“计算资源调度和分发”,需要框架自身来实现十分复杂:
所以为了将资源调度和计算过程解耦,也为了让更多大数据技术能够有统一的Hadoop接入标准以及简化资源调度流程,将资源调度程序从MapReduce中剥离并改造,Yarn(Yet Another Resource Manager)在这个背景下出现了,使用Yarn可以对所有接入Hadoop体系的大数据框架进行统一的资源调配,从而达到资源分发调度与计算过程这两个阶段的分离:
所以从Hadoop 2.0开始,Yarn和Hdfs及MapReduce组成了Hadoop体系的核心组件,为整个大数据资源分发调度做统一的接入及管理。
2.Yarn的组成
Yarn的组成包括:ResourceManager(RM)、NodeManager(NM)、ApplicationMaster(AM)以及容器(Container)四个部分,分别来介绍下各个部分的作用:
- ResourceManager:资源控制器,处理客户端请求进行资源的分配和调度,监控及控制NodeManager和ApplicationMaster,是客户端请求的入口和全局的调配中心。
- NodeManager:节点控制器,管理单个节点中的资源,并处理来自ResourceManager和ApplicationMaster的请求。
- ApplicationMaster:应用主程序,为应用程序申请资源,数据的切分、数据监控及容器。
- Container:容器,是Yarn中资源的抽象,封装了某个节点上的计算资源如内存、Cpu、磁盘等。
其中资源管理器ResourceManager进程会在独立集群上部署,而节点管理器会遍布在Hadoop集群各个节点之上,每个DataNode节点都会存在节点管理器NodeManager进程。
3.Yarn的工作流程
当提交一个MapReduce任务给Yarn进行调度时,核心的工作流程如下:
- 客户端首先准备好MapReduce ApplicationMaster、MapReduce任务以及MapReduce任务启动程序,提交三者到资源管理器ResourceManager上。
- 资源管理器ResourceManager和NodeManager通信,首先分配第一个容器Container,然后在上面运行MapReduce ApplicationMaster。
- 该MapReduce ApplicationMaster启动后向资源管理器ResourceManager请求申请任务运行容器资源。
- 获取到任务运行容器资源后,立即和该容器所属的节点管理器NodeManager通信,将MapReduce程序分发到该NodeManager的容器上运行。
- MapReduce任务在运行期和MapReduce ApplicationMaster通信,汇报自己的运行状态,如果运行结束,MapReduce ApplicationMaster向ResourceManager注销并释放所有的容器资源。
其他大数据框架如果想在Yarn上运行,就需要开发遵循Yarn规范的ApplicationMaster,这样在一个 Yarn集群中就可以同时并发执行各种不同的大数据计算框架,实现资源的统一调度管理。
4.Yarn调度器
Yarn通过资源管理器ResourceManager来统一管理资源的调度,而ResourceManager又包括了两部分,即调度器和资源管理器,对资源的调度实质是由调度器来完成。Yarn调度器内置了几种资源调度算法,包括 FIFO、Fair Scheduler、Capacity Scheduler等,默认采用的调度策略是Capacity Scheduler。调度器本质上是一个资源分配队列,所以通常会将Yarn成为Yarn调度队列服务。
-
FIFO,先进先出策略
采用FIFO队列对任务进行管理,先进任务先执行,后进任务后执行,会出现某个大任务独占很长执行时间的情况 -
Capacity,容器分配策略,将一个FIFO队列划分为多个FIFO队列,每个队列具备一定的资源分配比,对同一用户提交的资源划分到统一队列中,避免占据其他队列导致其他任务不得执行,每个队列仍然按FIFO的方式执行任务,是Yarn的默认策略
-
Fair,公平分配策略,支持多队列,每个队列的任务具备优先级,优先级越高则越先被执行,分配的资源也就越多