【yarn】CDP集群 Yarn配置capacity调度器批量分配

一、前言

最近要升级 CDH 集群成 CDP 集群,CDH 集群中 Yarn 服务默认使用的是 fair 调度器,CDP 集群使用的是 capacity 调度器,我们之前淌过 调度器因为批量分配设置不合理,导致任务集中分配到了某几台节点,使集群资源负载极度不均衡。

为了避免同样的问题出现在 CDP 集群上,我们提前进行调研。看看使用 调度器会不会也有集中分配的现象。但是调研过程中,出现了一些不和预期的现象,等待后续跟进。

二、CDH集中分配

前面介绍过,CDH 5.8-Hadoop2.6.0 版本后,针对公平调度,有如下几个配置,来针对任务类型(小任务)加快分配的优化。

配置名解释
yarn.scheduler.fair.max.assign最大分配数:如果 assignmultiple 为 true 且 dynamic.max.assign 为 false,则一个心跳中可以分配的最大容器数。
yarn.scheduler.fair.assignmultiple分配多个:是否允许在一个心跳中分配多个容器。
yarn.scheduler.fair.dynamic.max.assign如果assignmultiple为真,是否动态确定一个心跳可以分配的资源量。开启后,节点上大约一半的未分配资源会在一次心跳中分配给容器。默认为真。

通过合理的配置,我们就可以即使用集中分配的方式,又不会扩大集群负载差异。

CDH 集群如何配置这里不展开介绍。

三、CDP集中分配

CDP 集群中已经使用容量调度来作为默认的调度器,通过查阅官方和Cloudera 文件,发现 调度也是有通过心跳为 NodeManager 分配多个容器。相关配置如下:

配置名解释
yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled是否允许在一个 NodeManager 心跳中分配多个容器。默认为真。
yarn.scheduler.capacity.per-node-heartbeat.maximum-container-assignments如果multiple-assignments-enabledtrue,则在一个 NodeManager 心跳中可以分配的最大容器数量。默认为 -1,不设置限制。
yarn.scheduler.capacity.per-node-heartbeat.maximum-offswitch-assignments如果multiple-assignments-enabledtrue,则在一个 NodeManager 心跳中可以分配的最大 off-switch 容器数量。默认为 1,表示一个心跳中只允许一个关闭开关分配。

如何配置

  1. Cloudera Manager 中,选择集群 > YARN 队列管理器 UI 服务
    在这里插入图片描述

  2. YARN 队列管理器窗口中,单击调度程序配置选项卡。
    在这里插入图片描述

  3. 在“调度程序配置”窗口中
    在这里插入图片描述

  4. 选中Enable Multiple Assignments Per Heartbeat复选框以允许在一个 NodeManager 心跳中分配多个容器

  5. 配置以下 NodeManager 心跳属性:

  • Maximum Container Assignments Per Heartbeat : 在一个 NodeManager 心跳中可以分配的最大容器数。将此值设置为 -1 将禁用此限制。
  • Maximum Off-Switch Assignments Per Heartbeat : 可以在一个 NodeManager 心跳中分配的关闭开关容器的最大数量。

三、总结

  • capacity 调度器也有类似 fair 调度器的心跳批量分配配置。
  • CDP 集群 capacity 调度器默认开启了批量分配,并且分配数量为 100,这个值需要调小。
  • 目前测试下来,发现配置好像没有生效,这个需要后续联系专家跟进下。

后续

这里贴一下后续,CDP默认配置是把container尽量分配到多个节点的. 这主要是因为CDP默认启用了 Asynchronous Scheduling, 不用等NM的心跳分配container. 如果需要测试集中分配的场景, 可以把Asynchronous Scheduling关闭:

CM -> YARN QM -> Scheduler Configuration -> Asynchronous Scheduling 不勾选

然后需要重启ResourceManager是设置生效.

还有一点需要注意的是, 很多时候, App请求的containeroff-switch的(也就是不在意 data locality), 比如spark Pi程序的场景, Spark请求的都是off-switchcontainer, 为了验证集中分配的效果, 我们还需要把 YARN QM 中的 Maximum Off-Switch Assignments Per Heartbeat 调大, 就能看到效果了.

参考

  1. https://docs.cloudera.com/cdp-private-cloud-base/7.1.7/yarn-allocate-resources/topics/yarn-set-user-limits.html
  2. https://docs.cloudera.com/cdp-private-cloud-base/7.1.7/yarn-allocate-resources/topics/yarn-configure-nm-heartbeat.html
  3. https://hadoop.apache.org/docs/r3.1.1/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html#Reviewing_the_configuration_of_the_CapacityScheduler
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值