欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

yarnfair-scheduler公平调度实例

程序员文章站 2022-03-14 08:24:36
某个集群需求 通过yarn将集群资源设置为A,B两个队列, A队列设置占用资源70%主要用来运行常规的定时任务,B队列设置占用资源30%主要运行临时任务,两个队列间可相互资源共享,假如A队列...

某个集群需求

通过yarn将集群资源设置为A,B两个队列, A队列设置占用资源70%主要用来运行常规的定时任务,B队列设置占用资源30%主要运行临时任务,两个队列间可相互资源共享,假如A队列资源占满,B队列资源比较充裕,A队列可以使用B队列的资源,使总体做到资源利用最大化

采取措施

经过调研,yarn的调度有多种方式,使用Capacity Scheduler,Fair Scheduler 均可实现此需求。 但是最终还是参考某个公司的集群设置,使用了Fair Scheduler。

使用yarn的公平调度方式, 设置A,B两个队列, weight权重比为3:7, 但是A队列设置的最大资源是总体yarn资源的百分之30, B队列设置的最大资源是yarn资源的百分之90. 这样,当如果两个队列都满负荷运行时, A队列占百分之30, B队列占百分之70的资源。 如果只运行A队列,那么A队列最大只能占yarn总体资源的30%, 如果只运行B队列,B队列最大只能占总体的90%

这样设置是有原因的,首先是满足了我们的需求,其次拥有预留空间和最大限制,可以尽快的启动一个程序最终我设置的如下,经过测试,这个测试集群可用,并且能应用于某个大型集群
下面是测试集群的相关功能

设置方法如下

yarn-site中设置使用公平调度

  yarn.resourcemanager.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulerIn case you do not want to use the default scheduler

$HADOOP_HOME/etc/hadoop 下创建fair-scheduler.xml文件
下面是参考某个测试集群的例子


fair**92160 mb,26 vcores10010240 mb,11vcores1000fair3**276480 mb,81vcores50010240 mb, 11vcores1000fair7

主要参数的含义

defaultQueueSchedulingPolicy 队列的默认调度策略, 我们设置为fair 这里设置了两个队列, root.default, root.queue1 aclAdministerApps 和 aclSubmitApps 一些ACL权限,我没有仔细研究,设置成*所有用户可用即可(如果需要配置部分用户可用,我没有深入研究) maxResources 这个队列最大不能超过的资源数,这是程序运行必须会满足的条件, 例如我们这里,root.default设置的是总资源的30% 也就是92160MB, root.queue1设置的是总资源的90%, 也就是276480 minResource 队列申请时的最小资源数,一般看情况设置,可以设置成maxResource的百分之10 minSharePreemptionTimeout 指定的时间内未获得最小的资源保障,调度器就会抢占containers, 我们设置成1000 ms schedulingPolicy 调度策略 fair weight 我们设置的是3:7, 那么如果两个队列都满负荷运行,那么各自将按照3:7的方式来均分yarn的全部资源 queuePlacementPolicy 设置规则, 例如下面的两个规则, 说明如果是用户使用一个其他的队列名,我们不会创建新的队列, 然后走下一个规则,, 这两条规则合在一起就是说 如果用户使用一个其他的队列名,那么都会按照root.default的队列方式运行