热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Yarn的CapacityScheduler与DRF了解

   CapacityScheduler以队列为单位划分资源,每个队列可以设定一定比例的资源最低保证和使用上限,每个用户也可以设定一定的资源使用上限以防止滥用队列中的资源。当一个队列的资源有

    Capacity Scheduler以队列为单位划分资源,每个队列可以设定一定比例的资源最低保证和使用上限,每个用户也可以设定一定的资源使用上限以防止滥用队列中的资源。当一个队列的资源有剩余时,可暂时将剩余资源给其他队列使用。

    在yarn-site.xml文件中指定使用CapacityScheduler

    

      yarn.resourcemanager.scheduler.class

org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

   

 

Capacity Scheduler介绍:

容量调度器有个预定义的队列,名字是root,所有的队列都是root的子队列。更多的子队列可以被设置,通过配置yarn.scheduler.capacity.root.queues,逗号分开的子队列即可(同一级队列资源占比加起来必须是100%)。如下所示:

 

     yarn.scheduler.capacity.root.queues

     a,b

 

 

子队列还可以继续设置子队列:

  yarn.scheduler.capacity.root.a.queues

  a1,a2,a3

 

 

每个子队列设置如下资源相关配置:

 

    yarn.scheduler.capacity.root.a.capacity

    10

 

系统繁忙时,a这个队列最少可以占用root队列10%的资源(如果a这个队列不是很繁忙,那么这个队列中的资源可能被其他队列借走)。注意,子队列值之和要等于100

 

 

    yarn.scheduler.capacity.root.a.maximum-capacity

    100

 

系统繁忙时,a这个队列最多可以占用root队列100%的资源,该配置决定了队列资源的上限。

 

 

    yarn.scheduler.capacity.root.a.user-limit-factor

    1

 

    每个用户可以使用队列资源占比,当前1表示可以使用100%的capacity资源

 

 

    yarn.scheduler.capacity.root.a.state

    RUNNING

 

    队列的状态,可以为STOPPED或者RUNNING,

 

 

    yarn.scheduler.capacity.root.a.acl_submit_applications

    *

 

 

    yarn.scheduler.capacity.root.a.acl_administer_queue

    *

 

    这两个设置用于限制那些用户可以使用队列,*表示不限制

 

除了以上这些,还有一些其他的配置:

 

    yarn.scheduler.capacity.maximum-applications

    10000

  

    集群中application最大数目

 

 

    yarn.scheduler.capacity.maximum-am-resource-percent

    0.1

 

集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity.maximum-am-resource-percent设置,而单个队列可通过参数yarn.scheduler.capacity..maximum-am-resource-percent设置适合自己的值

 

 

yarn.scheduler.capacity.resource-calculator  

org.apache.hadoop.yarn.util.resource.DominantResourceCalculator

 

    设置使用的资源分配算法,该算法会同时考虑CPU以及内存资源,让所有Application的“主要资源占比”资源尽可能的均等。

 

DRF算法说明:

DRF资源分配算法的设计思想是,让所有Application的“主要资源占比”尽量均等,对于Yarn来说资源指的就是CPU及内存。

    DRF是基于Max-min fairness算法改进而来,不同的是Max-min fairness算法只支持某种单一资源的分配,该算法的详细内容可以看参考中的链接,此处不展开细说。大概想法是给每个用户都根据权重分配一定比例的资源,资源有的多的任务,将这些资源再按照权重分别给那些资源不够的任务。

    DRF首先会计算任务是CPU密集型资源还是内存密集型资源,哪个占的比例大哪个就称为主资源。DRF就是将Max-min fairness算法应用在主资源上,最大化主资源。上一张论文中的经典例子:

    系统中一共有9个CPU,18G内存,任务A需要(1CPU,4G内存),任务B需要(3CPU,1G内存),因为1/9 <4/18,所以任务A的主资源是内存,任务B的主资源是CPU。

 

每次迭代都要选择一个用户为其分配资源,用户的选择办法:选择当前主资源占比最小的用户,即已经分配给用户的主资源占这种资源总量的比例哪个小,优先给哪个用户分配资源。

所以个人觉得论文上的这图好像有点问题,应该是ABABA才对,因为一开始A对主资源的需求比B要小,4/18 <3/9。

Yarn实际应用中还会考虑任务设置的权重,资源分配的思路和这个是差不多的。

 

 

 

 

 

参考:

    https://my.oschina.net/guol/blog/1574106(Yarn Web UI参数解析)

    https://www.jianshu.com/p/7b1dbb772f93(Max-min fairness最大最小公平算法)

    http://static.usenix.org/event/nsdi11/tech/full_papers/Ghodsi.pdf(DRF算法论文)

 

 


推荐阅读
  • 本文介绍了在Mac上搭建php环境后无法使用localhost连接mysql的问题,并通过将localhost替换为127.0.0.1或本机IP解决了该问题。文章解释了localhost和127.0.0.1的区别,指出了使用socket方式连接导致连接失败的原因。此外,还提供了相关链接供读者深入了解。 ... [详细]
  • 本文详细介绍了Linux中进程控制块PCBtask_struct结构体的结构和作用,包括进程状态、进程号、待处理信号、进程地址空间、调度标志、锁深度、基本时间片、调度策略以及内存管理信息等方面的内容。阅读本文可以更加深入地了解Linux进程管理的原理和机制。 ... [详细]
  • sklearn数据集库中的常用数据集类型介绍
    本文介绍了sklearn数据集库中常用的数据集类型,包括玩具数据集和样本生成器。其中详细介绍了波士顿房价数据集,包含了波士顿506处房屋的13种不同特征以及房屋价格,适用于回归任务。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • Android系统移植与调试之如何修改Android设备状态条上音量加减键在横竖屏切换的时候的显示于隐藏
    本文介绍了如何修改Android设备状态条上音量加减键在横竖屏切换时的显示与隐藏。通过修改系统文件system_bar.xml实现了该功能,并分享了解决思路和经验。 ... [详细]
  • 本文介绍了在Windows环境下如何配置php+apache环境,包括下载php7和apache2.4、安装vc2015运行时环境、启动php7和apache2.4等步骤。希望对需要搭建php7环境的读者有一定的参考价值。摘要长度为169字。 ... [详细]
  • 本文介绍了前端人员必须知道的三个问题,即前端都做哪些事、前端都需要哪些技术,以及前端的发展阶段。初级阶段包括HTML、CSS、JavaScript和jQuery的基础知识。进阶阶段涵盖了面向对象编程、响应式设计、Ajax、HTML5等新兴技术。高级阶段包括架构基础、模块化开发、预编译和前沿规范等内容。此外,还介绍了一些后端服务,如Node.js。 ... [详细]
  • mac php错误日志配置方法及错误级别修改
    本文介绍了在mac环境下配置php错误日志的方法,包括修改php.ini文件和httpd.conf文件的操作步骤。同时还介绍了如何修改错误级别,以及相应的错误级别参考链接。 ... [详细]
  • 如何提高PHP编程技能及推荐高级教程
    本文介绍了如何提高PHP编程技能的方法,推荐了一些高级教程。学习任何一种编程语言都需要长期的坚持和不懈的努力,本文提醒读者要有足够的耐心和时间投入。通过实践操作学习,可以更好地理解和掌握PHP语言的特异性,特别是单引号和双引号的用法。同时,本文也指出了只走马观花看整体而不深入学习的学习方式无法真正掌握这门语言,建议读者要从整体来考虑局部,培养大局观。最后,本文提醒读者完成一个像模像样的网站需要付出更多的努力和实践。 ... [详细]
  • Android工程师面试准备及设计模式使用场景
    本文介绍了Android工程师面试准备的经验,包括面试流程和重点准备内容。同时,还介绍了建造者模式的使用场景,以及在Android开发中的具体应用。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Linux服务器密码过期策略、登录次数限制、私钥登录等配置方法
    本文介绍了在Linux服务器上进行密码过期策略、登录次数限制、私钥登录等配置的方法。通过修改配置文件中的参数,可以设置密码的有效期、最小间隔时间、最小长度,并在密码过期前进行提示。同时还介绍了如何进行公钥登录和修改默认账户用户名的操作。详细步骤和注意事项可参考本文内容。 ... [详细]
  • 生成式对抗网络模型综述摘要生成式对抗网络模型(GAN)是基于深度学习的一种强大的生成模型,可以应用于计算机视觉、自然语言处理、半监督学习等重要领域。生成式对抗网络 ... [详细]
  • Java序列化对象传给PHP的方法及原理解析
    本文介绍了Java序列化对象传给PHP的方法及原理,包括Java对象传递的方式、序列化的方式、PHP中的序列化用法介绍、Java是否能反序列化PHP的数据、Java序列化的原理以及解决Java序列化中的问题。同时还解释了序列化的概念和作用,以及代码执行序列化所需要的权限。最后指出,序列化会将对象实例的所有字段都进行序列化,使得数据能够被表示为实例的序列化数据,但只有能够解释该格式的代码才能够确定数据的内容。 ... [详细]
  • 本文介绍了Java工具类库Hutool,该工具包封装了对文件、流、加密解密、转码、正则、线程、XML等JDK方法的封装,并提供了各种Util工具类。同时,还介绍了Hutool的组件,包括动态代理、布隆过滤、缓存、定时任务等功能。该工具包可以简化Java代码,提高开发效率。 ... [详细]
author-avatar
妖泪蓝夕_746
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有