Fair Scheduler将整个Yarn的可用资源划分成多个资源池,每个资源池中可以配置最小和最大的可用资源(内存和CPU)、最大可同时运行Application数量、权重、以及可以提交和管理Application的用户等。

现在一般的大数据平台也都提供了可配置的界面:

以TDH为例:

default 也就是有一个默认的队列,

首先在yarn-site.xml中,将配置参数yarn.resourcemanager.scheduler.class设置为org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler

Fair Scheduler的配置选项包括两部分,其中一部分在yarn-site.xml中,主要用于配置调度器级别的参数,另外一部分在一个自定义配置文件(默认是fair-scheduler.xml)中,主要用于配置各个队列的资源量、权重等信息。

1. 配置文件yarn-site.xml

(1) yarn.scheduler.fair.allocation.file :自定义XML配置文件所在位置,该文件主要用于描述各个队列的属性,比如资源量、权重等,具体配置格式将在后面介绍。

(2)  yarn.scheduler.fair.user-as-default-queue:当应用程序未指定队列名时,是否指定用户名作为应用程序所在的队列名。如果设置为false或者未设置,所有未知队列的应用程序将被提交到default队列中,默认值为true。

(3)  yarn.scheduler.fair.preemption:是否启用抢占机制,默认值是false。

(4)  yarn.scheduler.fair.sizebasedweight:在一个队列内部分配资源时,默认情况下,采用公平轮询的方法将资源分配各各个应用程序,而该参数则提供了另外一种资源分配方式:按照应用程序资源需求数目分配资源,即需求资源数量越多,分配的资源越多。默认情况下,该参数值为false。

(5)  yarn.scheduler.assignmultiple:是否启动批量分配功能。当一个节点出现大量资源时,可以一次分配完成,也可以多次分配完成。默认情况下,该参数值为false。

(6)  yarn.scheduler.fair.max.assign:如果开启批量分配功能,可指定一次分配的container数目。默认情况下,该参数值为-1,表示不限制。

(7)  yarn.scheduler.fair.locality.threshold.node:当应用程序请求某个节点上资源时,它可以接受的可跳过的最大资源调度机会。当按照分配策略,可将一个节点上的资源分配给某个应用程序时,如果该节点不是应用程序期望的节点,可选择跳过该分配机会暂时将资源分配给其他应用程序,直到出现满足该应用程序需的节点资源出现。通常而言,一次心跳代表一次调度机会,而该参数则表示跳过调度机会占节点总数的比例,默认情况下,该值为-1.0,表示不跳过任何调度机会。

(8)  yarn.scheduler.fair.locality.threshold.rack:当应用程序请求某个机架上资源时,它可以接受的可跳过的最大资源调度机会。

(9)  yarn.scheduler.increment-allocation-mb:内存规整化单位,默认是1024,这意味着,如果一个Container请求资源是1.5GB,则将被调度器规整化为ceiling(1.5 GB / 1GB) * 1G=2GB。

(10)  yarn.scheduler.increment-allocation-vcores:虚拟CPU规整化单位,默认是1,含义与内存规整化单位类似。

2. 自定义配置文件

Fair Scheduler允许用户将队列信息专门放到一个配置文件(默认是fair-scheduler.xml),对于每个队列,管理员可配置以下几个选项:

(1)  minResources :最少资源保证量,设置格式为“X mb, Y vcores”,当一个队列的最少资源保证量未满足时,它将优先于其他同级队列获得资源,对于不同的调度策略(后面会详细介绍),最少资源保证量的含义不同,对于fair策略,则只考虑内存资源,即如果一个队列使用的内存资源超过了它的最少资源量,则认为它已得到了满足;对于drf策略,则考虑主资源使用的资源量,即如果一个队列的主资源量超过它的最少资源量,则认为它已得到了满足。

(2)  maxResources:最多可以使用的资源量,fair scheduler会保证每个队列使用的资源量不会超过该队列的最多可使用资源量。

(3)  maxRunningApps:最多同时运行的应用程序数目。通过限制该数目,可防止超量Map Task同时运行时产生的中间输出结果撑爆磁盘。

(4)  minSharePreemptionTimeout:最小共享量抢占时间。如果一个资源池在该时间内使用的资源量一直低于最小资源量,则开始抢占资源。

(5)  schedulingMode/schedulingPolicy:队列采用的调度模式,可以是fifo、fair或者drf。

(6)  aclSubmitApps:可向队列中提交应用程序的Linux用户或用户组列表,默认情况下为“*”,表示任何用户均可以向该队列提交应用程序。需要注意的是,该属性具有继承性,即子队列的列表会继承父队列的列表。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。

(7)  aclAdministerApps:该队列的管理员列表。一个队列的管理员可管理该队列中的资源和应用程序,比如可杀死任意应用程序。

管理员也可为单个用户添加maxRunningJobs属性限制其最多同时运行的应用程序数目。此外,管理员也可通过以下参数设置以上属性的默认值:

(1)  userMaxJobsDefault:用户的maxRunningJobs属性的默认值。

(2) defaultMinSharePreemptionTimeout :队列的minSharePreemptionTimeout属性的默认值。

(3)  defaultPoolSchedulingMode:队列的schedulingMode属性的默认值。

(4)  fairSharePreemptionTimeout:公平共享量抢占时间。如果一个资源池在该时间内使用资源量一直低于公平共享量的一半,则开始抢占资源。

根据用户名分配资源池

如图所示,假设整个Yarn集群的可用资源为100vCPU,100GB内存,现在为3个业务各自规划一个资源池,另外,规划一个default资源池,用于运行其他用户和业务提交的任务。如果没有在任务中指定资源池(通过参数mapreduce.job.queuename),那么可以配置使用用户名作为资源池名称来提交任务,即用户businessA提交的任务被分配到资源池businessA中,用户businessC提交的任务被分配到资源池businessC中。除了配置的固定用户,其他用户提交的任务将会被分配到资源池default中。

这里的用户名,就是提交Application所使用的Linux/Unix用户名。

另外,每个资源池可以配置允许提交任务的用户名,比如,在资源池businessA中配置了允许用户businessA和用户lxw1234提交任务,如果使用用户lxw1234提交任务,并且在任务中指定了资源池为businessA,那么也可以正常提交到资源池businessA中。

根据权重获得额外的空闲资源

在每个资源池的配置项中,有个weight属性(默认为1),标记了资源池的权重,当资源池中有任务等待,并且集群中有空闲资源时候,每个资源池可以根据权重获得不同比例的集群空闲资源。

比如,资源池businessA和businessB的权重分别为2和1,这两个资源池中的资源都已经跑满了,并且还有任务在排队,此时集群中有30个Container的空闲资源,那么,businessA将会额外获得20个Container的资源,businessB会额外获得10个Container的资源。

最小资源保证

在每个资源池中,允许配置该资源池的最小资源,这是为了防止把空闲资源共享出去还未回收的时候,该资源池有任务需要运行时候的资源保证。

比如,资源池businessA中配置了最小资源为(5vCPU,5GB),那么即使没有任务运行,Yarn也会为资源池businessA预留出最小资源,一旦有任务需要运行,而集群中已经没有其他空闲资源的时候,这个最小资源也可以保证资源池businessA中的任务可以先运行起来,随后再从集群中获取资源。

动态更新资源配额

Fair Scheduler除了需要在yarn-site.xml文件中启用和配置之外,还需要一个XML文件来配置资源池以及配额,而该XML中每个资源池的配额可以动态更新,之后使用命令:yarn rmadmin –refreshQueues 来使得其生效即可,不用重启Yarn集群。

需要注意的是:动态更新只支持修改资源池配额,如果是新增或减少资源池,则需要重启Yarn集群。

  • 默认调度算法的考量因子是memory,但是也可以也可以设置DRF(Dominant Resource Fairness), 会考虑mem和vcore的资源.
domain模式和default模式有什么区别呢
default表示资源分配只由内存决定,Dominant表示资源分配由CPU和内存之间的主导资源决定。例如,如果用户A运行CPU重的任务,并且用户B运行内存繁重的任务,则Dominant会分配更多的CPU和更少的内存到用户A运行的任务,并为用户B运行的任务分配更少的CPU和更多的内存。而default不会考虑这些。
  • priorities的使用

the priorities are used as weights to determine the fraction of total resources that each app should get.

当队列没有任务时,最小资源可以被其他队列抢走;当有新的任务进来时,如果集群有资源则获取资源,如果没有则会从其他低优先级的队列中抢到资源,执行任务

  • 哪些情况下会发生抢占

    • 最小资源抢占, 当前queue的资源无法保障时,而又有apps运行,需要向外抢占.
    • 公平调度抢占, 当前queue的资源为达到max,而又有apps运行,需要向外抢占.
  • ACL权限控制
    目前简单的就是使用,基于linux用户、用户组账号的ACL

有两个控制,提交应用、管理应用: aclSubmitApps、aclAdministerApps

  • An example allocation file is given here:

<?xml version="1.0"?>
<allocations><queue name="sample_queue"><minResources>10000 mb,0vcores</minResources><maxResources>90000 mb,0vcores</maxResources><maxRunningApps>50</maxRunningApps><maxAMShare>0.1</maxAMShare><weight>2.0</weight><schedulingPolicy>fair</schedulingPolicy><queue name="sample_sub_queue"><aclSubmitApps>charlie</aclSubmitApps><minResources>5000 mb,0vcores</minResources></queue></queue><queueMaxAMShareDefault>0.5</queueMaxAMShareDefault><queueMaxResourcesDefault>40000 mb,0vcores</queueMaxResourcesDefault><!-- Queue 'secondary_group_queue' is a parent queue and may haveuser queues under it --><queue name="secondary_group_queue" type="parent"><weight>3.0</weight><maxChildResources>4096 mb,4vcores</maxChildResources></queue><user name="sample_user"><maxRunningApps>30</maxRunningApps></user><userMaxAppsDefault>5</userMaxAppsDefault><queuePlacementPolicy><rule name="specified" /><rule name="primaryGroup" create="false" /><rule name="nestedUserQueue"><rule name="secondaryGroupExistingQueue" create="false" /></rule><rule name="default" queue="sample_queue"/></queuePlacementPolicy>
</allocations>

yarn还支持在队列之间移动程序,可以把一个重要的程序放到一个优先级更高的队列,或者把不重要的任务移动优先级低的队列

Moving applications between queues

The Fair Scheduler supports moving a running application to a different queue. This can be useful for moving an important application to a higher priority queue, or for moving an unimportant application to a lower priority queue. Apps can be moved by running yarn application -movetoqueue appID -queue targetQueueName.

When an application is moved to a queue, its existing allocations become counted with the new queue’s allocations instead of the old for purposes of determining fairness. An attempt to move an application to a queue will fail if the addition of the app’s resources to that queue would violate the its maxRunningApps or maxResources constraints.

博客:http://dongxicheng.org/mapreduce-nextgen/hadoop-yarn-configurations-fair-scheduler/

1、fair-scheduler.xml中的weight的作用是什么?怎么样能测出来weight的作用?
2、使用fair调度策略,会不会出现负载不均衡的现象?网上说:默认批处理会出现负载不均衡,但每次都是均衡的, 涉及到yarn.scheduler.fair.max.assign 和yarn.scheduler.assignmultiple 两个配置项。这块到底是什么样的?

(1) weight主要用在资源共享之时,weight越大,拿到的资源越多。比如一个pool中有20GB内存用不了,这时候可以共享给其他pool,其他每个pool拿多少,就是由权重决定的
(2)fair也会出现,均衡不均衡是相对的,只不多这两个参数可以缓解。

yarn中资源调度fair schedule详解相关推荐

  1. 【JavaScript 教程】ES6 中的 Promise对象 详解

    [JavaScript 教程]ES6 中的 Promise对象 详解 1.Promise对象含义 promise是异步编程的一种解决方法. 所谓promise,简单说是一个容器,里面保存着某个未来才会 ...

  2. html5代码转换为视频,HTML5中的视频代码详解

    摘要 腾兴网为您分享:HTML5中的视频代码详解,智学网,云闪付,易推广,小红书等软件知识,以及360win10,流量魔盒,fitbit,上港商城,安卓2.3.7,全民惠,五年级下册英语单词表图片,t ...

  3. VMware虚拟机文件夹中各文件作用详解

    VMware虚拟机文件夹中各文件作用详解 虚拟机的文件管理由VMware Workstation来执行. 一个虚拟机一般以一系列文件的形式储存在宿主机中, 这些文件一般在由workstation为虚拟 ...

  4. C++中substr()函数用法详解

    C++中substr()函数用法详解 原型: string substr (size_t pos = 0, size_t len = npos) const; 返回一个新构造的string对象,其值初 ...

  5. php中 继承中的概念,JavaScript_JavaScript中的继承方式详解,js继承的概念 js里常用的如下 - phpStudy...

    JavaScript中的继承方式详解 js继承的概念 js里常用的如下两种继承方式: 原型链继承(对象间的继承) 类式继承(构造函数间的继承) 由于js不像java那样是真正面向对象的语言,js是基于 ...

  6. Java中的static关键字详解

    ** Java中的static关键字详解 ** 在一个类中定义一个方法为static,即静态的,那就是说无需本类的对象就可以调用此方法.调用一个静态方法就是 "类名.方法名" ,静 ...

  7. java多线程中的join方法详解

    java多线程中的join方法详解 方法Join是干啥用的? 简单回答,同步,如何同步? 怎么实现的? 下面将逐个回答. 自从接触Java多线程,一直对Join理解不了.JDK是这样说的:join p ...

  8. java中匿名内部类详解_java 中匿名内部类的实例详解

    搜索热词 java 中匿名内部类的实例详解 原来的面貌: class TT extends Test{ void show() { System.out.println(s+"~~~哈哈&q ...

  9. java中的进制输出转换_Java I/O : Java中的进制详解

    作者:李强强 上一篇,泥瓦匠基础地讲了下Java I/O : Bit Operation 位运算.这一讲,泥瓦匠带你走进Java中的进制详解. 一.引子 在Java世界里,99%的工作都是处理这高层. ...

  10. PHP开发中常见的安全问题详解和解决方法

    PHP开发中常见的安全问题详解和解决方法 参考文章: (1)PHP开发中常见的安全问题详解和解决方法 (2)https://www.cnblogs.com/walblog/articles/83313 ...

最新文章

  1. python-01实现考勤表添加与删除
  2. java的this_java的this是什么意思
  3. android so readelf.exe,android ndk中的工具使用
  4. 查看 Linux 系统版本(发行版本)信息的相关命令语句
  5. 使用HISTCONTROL强制history忽略某条特定命令
  6. UVA - 10603 Fill(隐式图搜索)
  7. bootstrap 文字不换行
  8. 全国计算机考试一级在线模拟考试系统,全国计算机等级考试模拟系统全国计算机等级考试一级模拟试题和答案.doc...
  9. 免费直播编码软件应用技巧
  10. ARINC429基础知识
  11. 空间计量经济学 matlab,空间计量经济学基于MATLAB的应用分析
  12. 检错码与纠错码,一码归一码
  13. LeetCode -- 1818. 绝对差值和
  14. ACM篇:Uva -- 253 Cude Painting
  15. 铁路订票系统12306网站的业务和技术优化概述
  16. PCIe学习(一):PCIe基础及生成PIO例程分析
  17. 【django】图形验证码接口设计、后端逻辑、前端逻辑【15】
  18. linux 计算标准差,shell计算均值和标准差的工具:datamash
  19. 格鲁夫给经理人的第一课
  20. ctfshow卷王杯部分web

热门文章

  1. miflash刷机:fastboot模式/保留数据刷机
  2. Shell If Else语句 数学运算 与 逻辑运算
  3. STM32F407 SPI线的选择
  4. 《大数据时代》读书笔记-思维导图
  5. 杭州地铁2号线西北段顺利通车 三思LED照明彰显“暖心”服务
  6. 实时错误‘94’无效使用null值
  7. min-height和height的区别
  8. 研究遭质疑,Jeff Dean回应:我们本就不是为得到新SOTA,成本计算也搞错了
  9. 计算机声卡原理,什么是电脑声卡 电脑声卡的工作原理
  10. (一)一文掌握flink性能优化:资源配置调优