网易游戏FairScheduler迁移CapacityScheduler实践

一、背景

我们的海外集群上线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:用于决定资源分配顺序。该参数的配置分为对父队列和对叶子队列,对父队列配置时,用于对该队列的子队列进行排序,可选值有 utilizationpriority-utilization,默认是 utilization
对叶子队列配置时,用于对该队列内的作业进行排序,可选值有fifofair,默认是fifo
两者的配置值不能混淆,如果父队列配置了fifofair,则会报错。

3、队列有效资源
由于使用FairScheduler时队列配置的是绝对资源&

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值