欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

Hadoop 新特性、改进、优化和Bug分析系列4:YARN-326, YARN-2

程序员文章站 2022-05-01 09:09:38
...

作者: Dong | 新浪微博: 西成懂 | 可以转载, 但必须以超链接形式标明文章原始出处和作者信息及版权声明 网址:http://dongxicheng.org/mapreduce-nextgen/hadoop-jira-yarn-326-yarn-2/ 本博客的文章集合:http://dongxicheng.org/recommend/ 重大消息:我的H


重大消息:我的Hadoop新书《Hadoop技术内幕:深入解析MapReduce架构设计与实现原理》已经开始在各大网站销售了,购书链接地址: 当当购书网址,京东购书网址,卓越购书网址。新书官方宣传主页: http://hadoop123.com/。

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-187,MAPREDUCE-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-326和YARN-2。

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

本文链接地址: http://dongxicheng.org/mapreduce-nextgen/hadoop-jira-yarn-326-yarn-2/

作者:Dong,作者介绍:http://dongxicheng.org/about/

本博客的文章集合:http://dongxicheng.org/recommend/


Copyright © 2013
This feed is for personal, non-commercial use only.
The use of this feed on other websites breaches copyright. If this content is not in your news reader, it makes the page you are viewing an infringement of the copyright. (Digital Fingerprint:
)