聊聊 yarn 的三种资源调度器和公平调度器的最佳配置实践

简介: 聊聊 yarn 的三种资源调度器和公平调度器的最佳配置实践

一。YARN 的三种资源调度器概述

Hadoop 的 资源管理器 yarn 是支持可插拔的资源调度器的。目前内置支持的调度器有三个,即 fifo, capacity 和 fair 调度器三个,如下图所示:

image.png

yarn 内嵌支持的三种资源调度器

简单对比下三种调度器:

  • FIFO - Allocates resources based on arrival time. 在当前强调多租户和资源利用率的大环境下,几乎已经没有集群采用 fifo调度器了;
  • Fair - Allocates resources to weighted pools, with fair sharing within each pool. When configuring the scheduling policy of a pool, Domain Resource Fairness (DRF) is a type of fair scheduler;Cloudera 在 cdh 中推荐使用的即是该 Fair 调度器。(不过在 cloudera 的 cdp中,目前官方推荐且唯一支持的却是 capacity 调度器)
  • Capacity - Allocates resources to pools, with FIFO scheduling within each pool. hadoop yarn 默认配置的调度器即是该 Capacity调度器 ;星环的 Tdh 中默认配置的也是该 capacity scheduler.

可以看到,Fair 和 Capacity 调度器的核心理念是类似的:

  • 两个调度器都是把整个集群资源划分到若干个资源池 pool 中,而应用是提交到具体的资源池中并从中申请资源的,两个调取器都是基于这种机制,来做资源的隔离进而满足各种 sla 需求;
  • 两个调度器的 pool 都是支持层次 即 Hierarchical 的;
  • 两个调度器,都支持多租户;
  • 两个调度器,都支持提交应用时指定具体的资源池;
  • 当应用没有指定具体的资源池时,两个调度器都可以根据配置的规则,根据应用提交者的身份,决定实际使用的是哪个;
  • 两个调度器,都支持根据应用提交者的身份,动态创建资源池;

两个调度器的对比如下:

  • 两个调度器的核心区别,在于提交到一个具体的资源池中的所有任务,是采用 fair 公平调度还是 fifo 先进先出的调度;
  • fair 公平调度器,综合考量了提交到 pool 中的各种大小任务的差异,能避免因长时间运行的大任务占用了大量集群资源,造成小任务长时间得不到资源无法执行,影响用户体验;
  • Capacity 调度器,初看似乎没有像 fair 公平调取器那样,综合考量提交到 pool 中的任务大小的差异,但细想之下,管理员可以对大小任务/批流任务创建不同的 pool,由任务提交者根据任务的特点,提交到不同的 pool 中,一样能达到和 fair 调度器一样的效果和用户体验;
  • Capacity 调度器,配置更为简单,可能是因为这种原因,cloudera 的 cdp 中目前推荐且唯一支持的是 Capacity 调度器;

由于当前大部分客户使用的都是 cloudera 的 cdh 集群推荐的 Fair 调度器,所以这里我们重点看下该公平调度器。

二。一次 yarn 队列问题概述

某客户反馈,他们的cdh集群中“提交任务无法进入指定的资源池队列执行”,如下图所示:

image.png

hadoop jar 作业没有进入指定队列

image.png

hive作业没有进入指定的资源队列

三。上述yarn 队列问题原因分析与解决

排查问题,首先查看用户配置使用的调度器是 fair scheduler:

image.png

三种调度器

然后查看资源池 resource pools,和具体的放置规则 placement rules 和 user limits 用户限制:

image.png

resource pools

image.png

placement rules

image.png

user limits

熟悉 yarn 调度器的细心读者,看到这里有的已经发现问题所在了:在placement rules 放置规则中,管理员没有配置“specified at runtime”即“运行时指定资源池”!

在修改 palcement rules,添加了“specified at runtime”后,作业可以提交到指定的队列,截图如下:

image.png

placement rules配置

hive作业运行在指定的资源队列root.limingg2中


四。背景知识:Fair 调度器支持的多种 placement rules

事实上,公平调度器支持了丰富的 placement rules:

image.png

公平调度器支持的 placemnt rules列表

image.png

specified at run time placement rules 配置细节截图

image.png

某个placement rules配置细节截图

image.png

某个placement rules配置细节截图

image.png

某个placement rules配置细节截图

image.png

某个placement rules配置细节截图

fair 公平调度器支持多种放置策略,大体可以分为以下几大类:

  • 用户提交作业时指定pool;
  • 使用集群管理员配置的指定pool;
  • 根据用户名动态判断 pool;
  • 根据用户 primary group 动态判断 pool;
  • 根据用户 secondary group 动态判断 pool;

其中大多数都支持选项 “Create the pool if it does not exis”,即对应的 pool 不存在时动态创建。

五。笔者推荐的Fair 调度器的最佳配置实践

笔者建议,Fair 调度器配置以下resource pools (注意:root.dev, root.prod 等资源队列可以根据实际情况配置多个; weight, min 和 max resources, max running apps等,都可以根据实际情况调整):

image.png

reouce pools

配合以下placement rules: (注意:规则生效的优先级跟以下配置项的顺序有关,我们这里故意配置优先使用用户指定的队列。)

image.png

placement rules

每个资源池,再根据情况,配置 resouce limits, scheduling policy, preemption, submission accss control, administration access control(注意:这里的提交访问控制submission accss control需要根据实际情况配置,很重要!)

image.png

image.png

image.png

image.png

某个资源池的具体配置

以上资源池 resouce pools,放置规则 placemnt rules, 和每个资源池具体的配置尤其是提交访问控制submission accss control的配置,兼顾了配置的灵活性和易用性,也兼顾了集群资源管控的严谨性:

  • 第一条 placement rules 确保了,如果用户提交作业时指定了队列,则优先使用该队列,且如果该队列不存在,不会动态创建,集群管理员需要事先规划,创建好各个应用系统需要的队列;
  • 第二条和第三条 placement rules 确保了,如果用户没有指定作业使用的队列,yarn 会根据每个池子的 acl 和提交作用的用户名,决定对应的最终队列名,如 root.prod.username 或 root.dev.username 或 root.users.username 等 (事实上,多租户多系统的平台,可能会根据租户和具体的 sla,建多个父池:root.promtion, root.dev, root.prd 等等)。此时即限制了作业资源上限(是父池的子池),也能通过资源池子池的名字看出来是哪个用户的作业;
  • 以上第二条和第三条 placement rules,我们指定了不能自动动态创建父池,只能根据用户名自动创建指定的父池下的子池,这点是出于严谨的考量,集群管理员需要事先规划,创建好各个应用系统需要的队列;
  • 以上第四条 placement rules 是拖底方案,确保以上条件都不满足时, 作业也有对应的资源队列去申请资源。

需要说明的是,以上是以 cloudera cdh 为例,演示了如何通过界面化方式进行具体配置,在其他大数据平台如 星环的 tdh中,界面化配置方式入口略有不同,大家也可以直接编辑底层的配置文件fair-scheduler.xml .

使用以上笔者推荐的公平调度器的最佳配置实践,配合上应用上线前代码的 review (重点关注提交作业用户的身份,和代码中是否指定了具体的资源队列),和集群定期的 audit (重点关注都运行了哪些类型的作业,是什么用户提交的,运行在哪些资源池中),整个集群就会处于一种可控且灵活的资源管控下,很好地满足 sla, 服务于各个业务部门啦!

参考资料:

Hadoop: Fair Scheduler

Hadoop: Capacity Scheduler



相关文章
|
6月前
|
资源调度 分布式计算 Java
Yarn资源调度器
Yarn资源调度器
42 0
|
5月前
|
资源调度 分布式计算 Kubernetes
Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
Koordinator 支持 K8s 与 YARN 混部,小红书在离线混部实践分享
|
4月前
|
分布式计算 资源调度 Hadoop
Hadoop【部署 02】hadoop-3.1.3 单机版YARN(配置、启动停止shell脚本修改及服务验证)
Hadoop【部署 02】hadoop-3.1.3 单机版YARN(配置、启动停止shell脚本修改及服务验证)
55 0
|
4月前
|
资源调度 大数据 调度
【云计算与大数据技术】集群资源统一管理系统YARN、Mesos、Omega讲解(图文解释 超详细)
【云计算与大数据技术】集群资源统一管理系统YARN、Mesos、Omega讲解(图文解释 超详细)
80 2
|
4月前
|
资源调度 分布式计算 Hadoop
Yarn【关于配置yarn-site.xml的注意事项】
Yarn【关于配置yarn-site.xml的注意事项】
|
5月前
|
资源调度 分布式计算 Hadoop
Yarn队列租户配置教程(实践记录)
Yarn队列租户配置教程(实践记录)
68 0
|
5月前
|
资源调度 分布式计算 Hadoop
YARN Capacity Scheduler容量调度器(超详细解读)
YARN Capacity Scheduler容量调度器(超详细解读)
241 0
|
5月前
|
资源调度 分布式计算 Hadoop
MapReduuce配置&YARN集群部署
MapReduuce配置&YARN集群部署
41 0
|
6月前
|
资源调度 分布式计算 数据可视化
灵活、可用、高扩展,EasyMR 带来全新 Yarn 的队列管理功能及可视化配置
本文为大家介绍各类资源划分和队列管理方式,以及 EasyMR YARN 的队列管理功能,如何通过可视化界面管理,给广大用户带来更高效和便捷的队列管理体验。
49 0
|
6月前
|
SQL 资源调度 大数据
公共大数据集群中如何配置 YARN 的公平调度器和容量调度器
公共大数据集群中如何配置 YARN 的公平调度器和容量调度器
公共大数据集群中如何配置 YARN 的公平调度器和容量调度器