Hadoop jira链接(【注】FS是“Fair Scheduler”的简称,CS是“Capacity Scheduler”的简称):
https://issues.apache.org/jira/browse/YARN-187(让FS支持层级队列组织方式)
https://issues.apache.org/jira/browse/MAPREDUCE-824(让CS支持层级队列组织方式)
https://issues.apache.org/jira/browse/YARN-569(让CS支持抢占)
https://issues.apache.org/jira/browse/YARN-326 (让FS支持多类别资源调度)
https://issues.apache.org/jira/browse/YARN-2 (让CS支持多类别资源调度)
所属范围(新特性、改进、优化或Bug):新特性
修复版本:2.1.0-beta及以上版本
所属分支(Common、HDFS、YARN或MapReduce):YARN、MapReduce
涉及模块:resourcescheduler

本篇文章涉及到的jira链接比较多,主要是Hadoop调度器新特性方面的增加。Capacity Scheduler和Fair Scheduler是Hadoop中最著名的两个多用户资源调度器,最初诞生于不同的公司,有着不同的设计理念的特色,但随着时间的迁移,这两个调度器已经变得非常的类似,截至目前为止,个人认为,框架方面基本一致,但支持的调度策略方面,Fair Scheduler要多于Capacity Scheduler,由于Fair Schduler每个队列可独立选择自己的调度模式,包括fifo、fair和drf,因此可以说,Fair Schduler包含了Capacity Scheduler(Fair Scheduler中将所有队列的调度模式调为fifo即可)。下面就这两个调度器的几个重大特性进行介绍(支持层次队列组织方式、支持资源抢占和支持多类别资源调度):

(1) 支持层次(树状)队列组织方式

在Hadoop 0.20.x版本或者更早的版本,Hadoop采用了平级队列组织方式,在这种组织方式中,管理员可将用户分到若干个扁平队列中,在每个队列中,可指定一个或几个队列管理员管理这些用户,比如杀死任意用户的作业,修改任意用户作业的优先级。然而,从资源管理角度看,仅仅按照队列组织用户是不够的,还需要将资源划分到这几个队列中,并按照一定的策略完成资源分配,这就需要Hadoop作业调度器的支持。总之,在Hadoop中,队列的组织是队列管理和资源分配的基础。

随着Hadoop应用越来越广泛,有用户提出需支持层级队列组织方式。典型的应用场景如下:在一个Hadoop集群中,管理员将所有计算资源划分给了若干个队列,每个队列对应了一个“组织”,其中有一个组织“Org1”,它分到了60%的资源,它内部包含3中类型的作业:

(1)产品线作业

(2)实验性作业—分属于三个不用的项目:Proj1,Proj2和Proj3

(3)其他类型作业

Org1管理员想更有效地控制这60%资源,比如将大部分资源分配给产品线作业的同时,能够让实验性作业和其他类型作业有最少资源保证。考虑到产品线作业提交频率很低,当有产品线作业提交时,必须第一时间得到资源,剩下的资源才给其他类型的作业,然而,一旦产品线作业运行结束,实验性作业和其他类型作业必须马上获取未使用的资源,一个可能的配置方式如下:

grid {

Org1 min=60% {

priority min=90% {

production min=82%

proj1 min=6% max=10%

proj2 min=6%

proj3 min=6%

}

miscellaneous min=10%

}

Org2 min=40%

}

这就引出来层级队列组织方式(更详细的介绍,可阅读我的这篇文章:Hadoop层级队列组织方式,http://dongxicheng.org/mapreduce/hadoop-hierarchy-queues/)。目前为止,Hadoop 2.0完全支持层次队列组织方式,且Fair Scheduler和Capacity Schduler均由很好的支持(具体查看:YARN-187MAPREDUCE-824)。

(2)支持资源抢占

YARN作为一个资源管理系统,对资源的分配和回收是其最基本的功能之一。资源抢占功能使得YARN能够根据集群资源分布和应用程序优先级动态调整资源分配量。最开始时,只有Fair Schduler支持资源抢占,随着资源抢占功能的需求急迫性,Capacity也正在企图加入资源抢占功能(具体查看YARN-569)。

(3)支持多类别资源调度

在MRv1中,为了简化调度器设计,Hadoop将多维度资源简化为一维度资源slot,进而将对CPU、内存等具体资源的调度问题转化为slot这种抽象资源的调度(参考我的Hadoop书籍《Hadoop技术内幕:深入理解MapReduce基本架构和设计与原理》6.7节“Hadoop资源管理”)。基于slot的调度存在各种各样的问题,比如粗粒度调度导致资源分配模糊、资源浪费严重(存在资源内碎片)等,而YARN则从根本上解决了该问题,YARN不再对资源进行简化,而是直接对具体资源,比如内存、CPU等,进行调度。在YARN最早版本中,仅支持内存一种资源的调度,后来在YARN-2(https://issues.apache.org/jira/browse/YARN-2)中引入了对CPU资源的调度。由于调度与资源隔离是同时使用的,缺一不可,而资源隔离采用了cgroup,而cgroup对CPU和内存之外的资源隔离并不是十分成熟(需要使用更高更新的linux内核,这个对很多公司来说不容易),因此,Hadoop要等待一段时间才会增加对其他资源的调度和隔离。对于多类别资源的调度,目前而言,使用最广泛的仍然是源自mesos的DRF调度机制(参考我的这篇文章:Apache Mesos调度机制,http://dongxicheng.org/apache-mesos/mesos-scheduler/),该机制是从传统的Max-min调度策略基础上扩展而来的,非常适合多用户多队列共享资源池的场景。关于Fair Scheduler和CapacityScheduler的DRF实现,可参考:YARN-326YARN-2

原创文章,转载请注明: 转载自董的博客

本文链接地址: Hadoop 新特性、改进、优化和Bug分析系列4:YARN-326, YARN-2

微信公众号:hadoop-123,专注于大数据技术分享,欢迎加入!

说点什么

avatar
  Subscribe  
提醒