Fair Scheduler 队列设置经验总结
由于公司的hadoop集群的计算资源不是很充足,需要开启yarn资源队列的资源抢占。在使用过程中,才明白资源抢占的一些特点。在这里总结一下。
只有一个队列的资源小于设置的 最小资源时,才有可能启动资源抢占。
只要所有的资源队列的最小资源之和小于等于集群的资源总量就都是合理的。如果最小资源之和大于集群的资源总量,同时又开启了资源抢占模式,那么资源调度就会不停的处于资源抢占的模式(这样的逻辑当然是不合理的了)。
所有队列的最大资源配置之和可以大于集群的资源总量是合理的
每个队列的最大资源配置 只要小于等于集群的资源总量 就也是合理的。
下面是我配置的一个例子:
<?xml version="1.0"?>
<allocations>
<defaultQueueSchedulingPolicy>drf</defaultQueueSchedulingPolicy>
<defaultMinSharePreemptionTimeout>300</defaultMinSharePreemptionTimeout>
<pool name="default">
<maxResources>0 mb, 0 vcores</maxResources>
<maxRunningApps>0</maxRunningApps>
<weight>0.0</weight>
</pool>
<pool name="online">
<minResources>24000 mb, 12 vcores</minResources>
<maxResources>48000 mb, 24 vcores</maxResources>
<maxRunningApps>12</maxRunningApps>
<weight>3.0</weight>
</pool>
<pool name="develop">
<minResources>12000 mb, 6 vcores</minResources>
<maxResources>24000mb, 12 vcores</maxResources>
<maxRunningApps>6</maxRunningApps>
<weight>2.0</weight>
</pool>
<pool name="bi">
<minResources>12000 mb, 6 vcores</minResources>
<maxResources>24000 mb, 12 vcores</maxResources>
<maxRunningApps>6</maxRunningApps>
<weight>1.0</weight>
</pool>
<!-- 与pool里的选择策略是:遇小选小 -->
<userMaxAppsDefault>5</userMaxAppsDefault>
<!-- 具体指定(specified):应用程序被放置到它要求队列中。如果应用程序要求没有队列,也就是说,它指定了: default
用户(user):应用程序被放置到一个与谁提交它的用户的名称队列
primaryGroup:应用程序被放置到一个队列,谁提交它的用户的主组的名称
secondaryGroupExistingQueue:应用程序被放置到一个有一个与谁提交了用户的次要组名的队列。符合配置的队列中的第一次要组将被选中
默认(default):应用程序被放置到一个名为default的队列
拒绝(reject):应用程序被拒绝
-->
<queuePlacementPolicy>
<!--<rule name="specified" create="false" /> 暂不启用: 用户提交任务时指定队列将无效-->
<rule name="user" create="false" />
<rule name="primaryGroup" create="false" />
<!--<rule name="secondaryGroupExistingQueue" create="false" /> 暂不启用: 尚未指定次要组 -->
<rule name="secondaryGroupExistingQueue" create="false" />
<!-- <rule name="reject"/> -->
<rule name="default" queue="develop"/>
</queuePlacementPolicy>
</allocations>
该示例中:有三个资源队列default,online,develop,bi四个队列;集群的共有24core,48G内存。
资源占用最小和最大比例:
default: 0% - 0%
online: 50% - 100%
develop: 25% - 50%
bi: 25% - 50%
该示例的最小资源之和是100%,最大资源之和可以大于资源总量,最大值可以根据实际中的情况来划分。
例如我们在线上要优先保证线上资源,所以online队列的最小资源比例为70%,最大为100%;develop,和bi的最小资源都是可以为0的,这样才能保证在紧急情况下online可以抢占100%的资源。
资源占用最小和最大比例:
default: 0% - 0%
online: 70% - 100%
develop: 0% - 50%
bi: 0% - 50%
上面是Fair Scheduler 资源划分的一点经验。下面要总结一下fair-Scheduler.xml配置个各个属性说明。
(二)schedulingPolicy 的理解
<schedulingPolicy>fair</schedulingPolicy>
(三)queuePlacementPolicy 的理解
<!-- 具体指定(specified):应用程序被放置到它要求队列中。如果应用程序要求没有队列,也就是说,它指定了: default
用户(user):应用程序被放置到一个与谁提交它的用户的名称队列
primaryGroup:应用程序被放置到一个队列,谁提交它的用户的主组的名称
secondaryGroupExistingQueue:应用程序被放置到一个有一个与谁提交了用户的次要组名的队列。符合配置的队列中的第一次要组将被选中
默认(default):应用程序被放置到一个名为default的队列
拒绝(reject):应用程序被拒绝
-->
<queuePlacementPolicy>
<!--<rule name="specified" create="false" /> 暂不启用: 用户提交任务时指定队列将无效-->
<rule name="user" create="false" />
<rule name="primaryGroup" create="false" />
<!--<rule name="secondaryGroupExistingQueue" create="false" /> 暂不启用: 尚未指定次要组 -->
<rule name="reject"/>
</queuePlacementPolicy>
(四)fair-Scheduler.xml配置个各个属性说明。