聊聊 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



相关文章
|
1月前
|
资源调度 分布式计算 调度
【赵渝强老师】Yarn的资源调度策略
Yarn作为资源和任务调度平台,支持多个应用程序同时运行,如MapReduce、Spark和Flink等。Yarn的资源调度方式主要包括FIFO Scheduler(先来先服务)、Capacity Scheduler(容量调度)和Fair Scheduler(公平调度)。FIFO Scheduler按任务提交顺序调度;Capacity Scheduler通过队列管理资源,支持多租户共享;Fair Scheduler则根据任务权重动态分配资源,确保公平性。
119 8
|
1月前
|
消息中间件 资源调度 关系型数据库
如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理
本文介绍了如何在Flink on YARN环境中配置Debezium CDC 3.0,以实现实时捕获数据库变更事件并将其传输到Flink进行处理。主要内容包括安装Debezium、配置Kafka Connect、创建Flink任务以及启动任务的具体步骤,为构建实时数据管道提供了详细指导。
91 9
|
2月前
|
资源调度
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
48 2
Ubuntu22.04静态ip配置+yarn build后显示内存超限,变异失败
|
2月前
|
XML 分布式计算 资源调度
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(一)
183 5
|
2月前
|
XML 资源调度 网络协议
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
大数据-02-Hadoop集群 XML配置 超详细 core-site.xml hdfs-site.xml 3节点云服务器 2C4G HDFS Yarn MapRedece(二)
157 4
|
2月前
|
分布式计算 资源调度 Hadoop
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
大数据-01-基础环境搭建 超详细 Hadoop Java 环境变量 3节点云服务器 2C4G XML 集群配置 HDFS Yarn MapRedece
93 4
|
2月前
|
资源调度 分布式计算 大数据
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
大数据-111 Flink 安装部署 YARN部署模式 FlinkYARN模式申请资源、提交任务
124 0
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-容量调度器(Yahoo!的Capacity Scheduler)
详细讲解了Hadoop YARN资源管理中的容量调度器(Yahoo!的Capacity Scheduler),包括队列和子队列的概念、Apache Hadoop的容量调度器默认队列、队列的命名规则、分层队列、容量保证、队列弹性、容量调度器的元素、集群如何分配资源、限制用户容量、限制应用程序数量、抢占申请、启用容量调度器以及队列状态管理等方面的内容。
96 3
|
3月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
详细介绍了Hadoop YARN资源管理中的公平调度器(Fair Scheduler),包括其概述、配置、队列结构、以及如何将作业提交到指定队列,展示了公平调度器如何通过分配文件(fair-scheduler.xml)来控制资源分配,并提供了配置示例和如何通过命令行提交作业到特定队列的方法。
208 0
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
|
4月前
|
图形学 数据可视化 开发者
超实用Unity Shader Graph教程:从零开始打造令人惊叹的游戏视觉特效,让你的作品瞬间高大上,附带示例代码与详细步骤解析!
【8月更文挑战第31天】Unity Shader Graph 是 Unity 引擎中的强大工具,通过可视化编程帮助开发者轻松创建复杂且炫酷的视觉效果。本文将指导你使用 Shader Graph 实现三种效果:彩虹色渐变着色器、动态光效和水波纹效果。首先确保安装最新版 Unity 并启用 Shader Graph。创建新材质和着色器图谱后,利用节点库中的预定义节点,在编辑区连接节点定义着色器行为。
325 0