admin管理员组文章数量:1612098
Capacity Scheduler以队列为单位划分资源,每个队列可以设定一定比例的资源最低保证和使用上限,每个用户也可以设定一定的资源使用上限以防止滥用队列中的资源。当一个队列的资源有剩余时,可暂时将剩余资源给其他队列使用。
在yarn-site.xml文件中指定使用CapacityScheduler
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
Capacity Scheduler介绍:
容量调度器有个预定义的队列,名字是root,所有的队列都是root的子队列。更多的子队列可以被设置,通过配置yarn.scheduler.capacity.root.queues,逗号分开的子队列即可(同一级队列资源占比加起来必须是100%)。如下所示:
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>a,b</value>
<property>
子队列还可以继续设置子队列:
<property>
<name>yarn.scheduler.capacity.root.a.queues</name>
<value>a1,a2,a3</value>
</description>
</property>
每个子队列设置如下资源相关配置:
<property>
<name>yarn.scheduler.capacity.root.a.capacity</name>
<value>10</value>
</property>
系统繁忙时,a这个队列最少可以占用root队列10%的资源(如果a这个队列不是很繁忙,那么这个队列中的资源可能被其他队列借走)。注意,子队列值之和要等于100
<property>
<name>yarn.scheduler.capacity.root.a.maximum-capacity</name>
<value>100</value>
</property>
系统繁忙时,a这个队列最多可以占用root队列100%的资源,该配置决定了队列资源的上限。
<property>
<name>yarn.scheduler.capacity.root.a.user-limit-factor</name>
<value>1</value>
</property>
每个用户可以使用队列资源占比,当前1表示可以使用100%的capacity资源
<property>
<name>yarn.scheduler.capacity.root.a.state</name>
<value>RUNNING</value>
</property>
队列的状态,可以为STOPPED或者RUNNING,
<property>
<name>yarn.scheduler.capacity.root.a.acl_submit_applications</name>
<value>*</value>
</property>
<property>
<name>yarn.scheduler.capacity.root.a.acl_administer_queue</name>
<value>*</value>
</property>
这两个设置用于限制那些用户可以使用队列,*表示不限制
除了以上这些,还有一些其他的配置:
<property>
<name>yarn.scheduler.capacity.maximum-applications</name>
<value>10000</value>
</property>
集群中application最大数目
<property>
<name>yarn.scheduler.capacity.maximum-am-resource-percent</name>
<value>0.1</value>
</property>
集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity.maximum-am-resource-percent设置,而单个队列可通过参数yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent设置适合自己的值
<property>
<name>yarn.scheduler.capacity.resource-calculator</name>
<value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value>
</property>
设置使用的资源分配算法,该算法会同时考虑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/guol/blog/1574106(Yarn Web UI参数解析)
https://www.jianshu/p/7b1dbb772f93(Max-min fairness最大最小公平算法)
http://static.usenix/event/nsdi11/tech/full_papers/Ghodsi.pdf(DRF算法论文)
本文标签: yarnCapacitySchedulerDRF
版权声明:本文标题:Yarn的CapacityScheduler与DRF了解 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dongtai/1728619935a1166222.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论