admin管理员组文章数量:1606665
一、背景
我们的海外集群上线spot动态节点后,由于动态节点不定期会被回收,为了保证作业运行稳定性,需要指定某些重点作业运行在固定节点,而这需要使用到CapacityScheduler的NodeLabel功能。虽然社区也有FairScheduler支持NodeLabel的patch(YARN-2497),但并不成熟,不适合在生产环境使用。
此外,目前社区的开发重点也偏向CapacityScheduler,随着版本的更新,它对于调度吞吐量做了众多改进,比如多线程调度、细粒度锁等。经过讨论后,我们决定将目前使用的FairScheduler切换为CapacityScheduler。
二、集群现状
目前我们的海外集群队列数800+,每天提交约18万个Hive、Spark等作业,我们需要在用户无感知情况下将调度器切换成CapacityScheduler,兼容调度器之间的功能差异,并保障集群调度性能。
三、配置转换
除了将yarn.resourcemanager.scheduler.class
配置为CapacityScheduler外,我们重点需要将队列配置fair-scheduler.xml转换为capacity-scheduler.xml,因为两者的配置方式差异较大,结合社区的资料(YARN-9698),我整理出一些关键配置的映射关系:
FairScheduler配置 | CapacityScheduler配置 | 配置说明 |
---|---|---|
minResources |
yarn.scheduler.capacity.<queue-path>.capacity |
队列最小资源 |
maxResources |
yarn.scheduler.capacity.<queue-path>.maximum-capacity |
队列最大资源 |
aclSubmitApps |
yarn.scheduler.capacity.<queue-path>.acl_submit_applications |
队列提交授权 |
aclAdministerApps |
yarn.scheduler.capacity.<queue-path>.acl_administer_queue |
队列管理授权 |
maxAMShare |
yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent |
AM资源限额管理 |
queueMaxAppsDefault |
yarn.scheduler.capacity.<queue-path>.maximum-applications |
最大apps限制 |
maxRunningApps |
yarn.scheduler.capacity.<queue-path>.max-parallel-apps |
最大运行apps限制 |
maxContainerAllocation (“X mb, Y vcores”) |
yarn.scheduler.capacity.<queue-path>.maximum-allocation-mb yarn.scheduler.capacity.<queue-path>.maximum-allocation-vcores |
container最大资源 |
yarn.scheduler.fair.preemption |
yarn.resourcemanager.scheduler.monitor.enable |
是否开启抢占,默认值为false |
yarn.scheduler.fair.allow-undeclared-pools |
yarn.scheduler.capacity.<queue-path>.auto-create-child-queue.enabled |
是否允许自动创建队列,FS默认为true,CS默认为false |
yarn.scheduler.fair.user-as-default-queue |
yarn.scheduler.capacity.queue-mappings |
用户队列映射,FS默认为true |
值得一提的是,在Hadoop 3.3.0版本,yarn提供了一个命令行工具来进行配置转换,使用方式如下:
yarn fs2cs -y /path/to/yarn-site.xml [-f /path/to/fair-scheduler.xml] {-o /output/path/ | -p} [-t] [-s] [-d]
但目前这个工具还不完善,我在试用过后发现有很多参数不支持转换,比如:
<userMaxAppsDefault> – default maximum applications per user
<minResources> – minimum resources for a queue
<maxResources> – maximum resources for a queue
最终我选择自己写脚本完成配置文件的转换,这个过程中遇到一些CapacityScheduler队列配置需要重点注意的地方:
1、资源计算器
yarn.scheduler.capacity.resource-calculator
:资源计算器用于在调度器中比较资源。
默认值是 org.apache.hadoop.yarn.util.resource.DefaultResourseCalculator
,只使用内存进行比较,而我们的集群中需要同时限制用户对内存和vcore的使用,所以需要将该参数设置为org.apache.hadoop.yarn.util.resource.DominantResourceCalculator
。
2、排序策略
yarn.scheduler.capacity.<queue-path>.ordering-policy
:用于决定资源分配顺序。该参数的配置分为对父队列和对叶子队列,对父队列配置时,用于对该队列的子队列进行排序,可选值有 utilization
和 priority-utilization
,默认是 utilization
;
对叶子队列配置时,用于对该队列内的作业进行排序,可选值有fifo
和 fair
,默认是fifo
。
两者的配置值不能混淆,如果父队列配置了fifo
或 fair
,则会报错。
3、队列有效资源
由于使用FairScheduler时队列配置的是绝对资源&
本文标签: 网易游戏CapacitySchedulerFairScheduler
版权声明:本文标题:网易游戏FairScheduler迁移CapacityScheduler实践 内容由热心网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:https://www.elefans.com/dianzi/1728506956a1161489.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论