FairScheduler
- 允许应用程序公平的共享集群资源,也支持队列层次。
- allocation文件每10s重新加载一次,允许动态修改
yarn-site配置项
-
yarn.scheduler.fair.allocation.file 配置文件路径
-
yarn.scheduler.fair.user-as-default-queue 设置为true,则未指定队列名时,默认提交到与用户名同名的队列
-
yarn.scheduler.fair.sizebasedweight 设置为true,则根据应用的大小分配份额,而不是为所有应用提供平等的份额。此时应用的权重是1的自然对数加上应用请求的总内存,除以2的自然对数。默认为false
-
yarn.scheduler.fair.assignmultiple 设置为true,则允许一次心跳分配多个容器。默认为false
-
yarn.scheduler.fair.dynamic.max.assign 多分配开启后,是否动态决定一次心跳分配的最大容器数量。默认为true
-
yarn.scheduler.fair.max.assign 多分配开启时,动态最大分配为false时,指定一次心跳分配的最大容器数量。默认为-1,无限制
-
yarn.scheduler.fair.locality.threshold.node 对于请求特定节点的容器,延迟调度的阈值(放弃调度)。值为0到1之间的浮点数,默认值-1.0,表示不放弃任何调度机会。
-
yarn.scheduler.fair.locality.threshold.rack 同上,该参数针对的是请求特定机架的容器
-
yarn.scheduler.fair.update-interval-ms 锁定调度器并重新计算公平份额、计算需求和检查是否有抢占到期的时间间隔。默认为500毫秒。
-
yarn.resource-types.memory-mb.increment-allocation 内存资源分配的最小单位,默认为1024mb。
-
yarn.resource-types.vcores.increment-allocation vcore资源分配的最小单位,默认为1。
allocation file
必须是XML格式
- 队列元素:
- queue,表示队列。可选属性"type",被设置为"parent"时,队列为父队列。队列包含以下属性
- minResources:队列可以分配的最小资源。如果最小份额不能满足,那么将在同一父队列下的任何其他队列获得可用资源。、
- maxResources:队列可以分配的最大资源。
- maxContainerAllocation:队列可以为单个容器分配的最大资源,不能大于maxResources。如果该值未设置则继承自父队列。
- maxChildResources:子队列可以使用的最大资源。
资源设置的旧格式:“X mb, Y vcores”, “X% cpu, Y% memory”, “X%”
资源设置的新格式:“vcores=X, memory-mb=Y” or “vcores=X%, memory-mb=Y%” - maxRunningApps:队列运行最大的app数量
- maxAMShare:队列用于分配am的最大份额。默认为0.5f
- weight:共享集群其他队列的资源权重
- schedulingPolicy:调度策略,一般允许为fifo/fair/drf,默认为fair。
- aclSubmitApps:可以提交应用到队列的一组用户或组
- aclAdministerApps:可以管理队列的一组用户或组,当前管理操作只有kill
- 用户元素:表示控制单个用户的行为
- userMaxAppsDefault:为未指定限制的任何用户设置默认的运行应用程序限制。
- queueMaxAppsDefault:设置队列的默认运行应用限制;在每个队列中被maxRunningApps元素覆盖。
- 队列放置策略:queuePlacementPolicy,包含一组将应用放置到队列的策略。从上到下进行验证。
- specified:app将会提交到指定的队列中。
- user:app将会提交到同名队列中。
- primaryGroup:app将会放置到用户所在组的队列中。
- default:如果没有指定队列,app将会提交到默认队列中
- reject:app将被拒绝
配置示例
<?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 name="sample_reservable_queue">
<reservation></reservation>
</queue>
</queue>
<queueMaxAMShareDefault>0.5</queueMaxAMShareDefault>
<queueMaxResourcesDefault>40000 mb,0vcores</queueMaxResourcesDefault>
<!-- Queue 'secondary_group_queue' is a parent queue and may have
user 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>