您的位置:首页 > 大数据 > 人工智能

yarn fair-scheduler 公平调度的一个实例

2018-01-30 21:42 281 查看

某个集群需求

通过yarn将集群资源设置为A,B两个队列, A队列设置占用资源70%主要用来运行常规的定时任务,B队列设置占用资源30%主要运行临时任务,两个队列间可相互资源共享,假如A队列资源占满,B队列资源比较充裕,A队列可以使用B队列的资源,使总体做到资源利用最大化

采取措施

经过调研,yarn的调度有多种方式,参考这篇文章: http://blog.csdn.net/suifeng3051/article/details/49508261

使用Capacity Scheduler,Fair Scheduler 均可实现此需求。 但是最终还是参考某个公司的集群设置,使用了Fair Scheduler。

使用yarn的公平调度方式, 设置A,B两个队列, weight权重比为3:7, 但是A队列设置的最大资源是总体yarn资源的百分之30, B队列设置的最大资源是yarn资源的百分之90. 这样,当如果两个队列都满负荷运行时, A队列占百分之30, B队列占百分之70的资源。 如果只运行A队列,那么A队列最大只能占yarn总体资源的30%, 如果只运行B队列,B队列最大只能占总体的90%

这样设置是有原因的,首先是满足了我们的需求,其次拥有预留空间和最大限制,可以尽快的启动一个程序,可以参考:http://blog.cloudera.com/blog/2016/06/untangling-apache-hadoop-yarn-part-4-fair-scheduler-queue-basics/

最终我设置的如下,经过测试,这个测试集群可用,并且能应用于某个大型集群

下面是测试集群的相关功能

设置方法如下

yarn-site中设置使用公平调度

<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
<description>In case you do not want to use the default scheduler</description>
</property>


$HADOOP_HOME/etc/hadoop 下创建fair-scheduler.xml文件

下面是参考某个测试集群的例子

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<allocations>
<defaultQueueSchedulingPolicy>fair</defaultQueueSchedulingPolicy>
<queue name="root">
<queue name="default">
<aclAdministerApps>*</aclAdministerApps>
<aclSubmitApps>*</aclSubmitApps>
<maxResources>92160 mb,26 vcores</maxResources>
<maxRunningApps>100</maxRunningApps>
<minResources>10240 mb,11vcores</minResources>
<minSharePreemptionTimeout>1000</minSharePreemptionTimeout>
<schedulingPolicy>fair</schedulingPolicy>
<weight>3</weight>
</queue>
<queue name="queue1">
<aclAdministerApps>*</aclAdministerApps>
<aclSubmitApps>*</aclSubmitApps>
<maxResources>276480 mb,81vcores</maxResources>
<maxRunningApps>500</maxRunningApps>
<minResources>10240 mb, 11vcores</minResources>
<minSharePreemptionTimeout>1000</minSharePreemptionTimeout>
<schedulingPolicy>fair</schedulingPolicy>
<weight>7</weight>
</queue>
</queue>
<queuePlacementPolicy>
<rule create="false" name="specified"/>
<rule create="true" name="default"/>
</queuePlacementPolicy>
</allocations>


主要参数的含义

defaultQueueSchedulingPolicy 队列的默认调度策略, 我们设置为fair

这里设置了两个队列, root.default, root.queue1

aclAdministerApps 和 aclSubmitApps 一些ACL权限,我没有仔细研究,设置成*所有用户可用即可(如果需要配置部分用户可用,我没有深入研究)

maxResources 这个队列最大不能超过的资源数,这是程序运行必须会满足的条件, 例如我们这里,root.default设置的是总资源的30% 也就是92160MB, root.queue1设置的是总资源的90%, 也就是276480

minResource 队列申请时的最小资源数,一般看情况设置,可以设置成maxResource的百分之10

minSharePreemptionTimeout 指定的时间内未获得最小的资源保障,调度器就会抢占containers, 我们设置成1000 ms

schedulingPolicy 调度策略 fair

weight 我们设置的是3:7, 那么如果两个队列都满负荷运行,那么各自将按照3:7的方式来均分yarn的全部资源

queuePlacementPolicy 设置规则, 例如下面的两个规则, 说明如果是用户使用一个其他的队列名,我们不会创建新的队列, 然后走下一个规则,, 这两条规则合在一起就是说 如果用户使用一个其他的队列名,那么都会按照root.default的队列方式运行
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐