YARN FairScheduler任务调度
Yarn提供可插拔的调度的算法,用于解决application之间资源竞争问题.
根据当前多租户多应用类型的应用场景,我们使用FairSchedule资源调度算法,来管理我们用户提交的队列、队列资源竞争.
主要涉及的配置文件有yarn-site.xml、fair-scheduler.xml
yarn-site.xml
只配置了几个觉得必须的项.
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value>
</property>
<property> #是否将采用用户名作为默认的queue name.
<name>yarn.scheduler.fair.user-as-default-queue</name>
<value>false</value>
</property>
<property> #是否抢占.
<name>yarn.scheduler.fair.preemption</name>
<value>true</value>
</property>
<property>
<name>yarn.scheduler.fair.allocation.file</name>
<value>/data/conf/hadoop/fair-scheduler.xml</value>
</property>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
fair-scheduler.xml
<allocations>
<user name="data">
<maxRunningApps>60</maxRunningApps>
</user>
<userMaxAppsDefault>5</userMaxAppsDefault>
<queueMaxAppsDefault>20</queueMaxAppsDefault>
<defaultFairSharePreemptionTimeout>10</defaultFairSharePreemptionTimeout>
<defaultMinSharePreemptionTimeout>5</defaultMinSharePreemptionTimeout>
<defaultQueueSchedulingPolicy>drf</defaultQueueSchedulingPolicy>
<queue name="root">
<aclSubmitApps> </aclSubmitApps>
<aclAdministerApps> </aclAdministerApps>
<queue name="long">
<minResources>88064 mb, 37 vcores</minResources>
<maxResources>413696 mb, 126 vcores</maxResources>
<weight>4.0</weight>
<aclSubmitApps> long</aclSubmitApps>
<aclAdministerApps> long</aclAdministerApps>
<fairSharePreemptionTimeout>300</fairSharePreemptionTimeout>
<minSharePreemptionTimeout>200</minSharePreemptionTimeout>
</queue>
<queuePlacementPolicy>
<rule name="specified" create="false"/>
<rule name="reject"/>
</queuePlacementPolicy>
</allocations>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 默认调度算法的考量因子是memory,但是也可以也可以设置DRF(Dominant Resource Fairness), 会考虑mem和vcore的资源.
- priorities的使用
the priorities are used as weights to determine the fraction of total resources that each app should get.
当队列没有任务时,最小资源可以被其他队列抢走;当有新的任务进来时,如果集群有资源则获取资源,如果没有则会从其他低优先级的队列中抢到资源,执行任务
-
哪些情况下会发生抢占
- 最小资源抢占, 当前queue的资源无法保障时,而又有apps运行,需要向外抢占.
- 公平调度抢占, 当前queue的资源为达到max,而又有apps运行,需要向外抢占.
-
ACL权限控制
目前简单的就是使用,基于linux用户、用户组账号的ACL
有两个控制,提交应用、管理应用: aclSubmitApps、aclAdministerApps
参考资料学习
正因为当初对未来做了太多的憧憬,所以对现在的自己尤其失望。生命中曾经有过的所有灿烂,终究都需要用寂寞来偿还。