YARN Capacity Scheduler容量调度器(超详细解读)

简介: YARN Capacity Scheduler容量调度器(超详细解读)

01 引言

之前写过一篇博客《yarn入门(一篇就够了)》,可以知道yarn主要有三种调度器,分别为FIFO、Capacity Scheduler和Fair Scheduler,其中Hadoop3.X默认的资源调度器是Capacity Scheduler,本文就来讲讲Capacity Scheduler容量调度器。

02 Capacity Scheduler

2.1 运行原理

容量调度器每个队列内部先进先出, 同一时间队列中只有一个任务在执行, 队列的并行度为队列的个数

Capacity Scheduler是一个hadoop支持的可插拔的资源调度器,它允许多租户安全的共享集群资源,它们的applications在容量限制之下,可以及时的分配资源。使用操作友好的方式运行hadoop应用,同时最大化吞吐能力和集群利用率。

Capacity Scheduler提供的核心理念就是Queues(队列),这些Queues通常由管理员设定,它支持多个队列,每个队列可配置一定的资源量,每个队列采用FIFO调度策略为了在共享资源上,提供更多的控制和预见性,Capacity Scheduler支持多级queue,以确保在其他queues允许使用空闲资源之前,资源可以在一个组织的sub-queues之间共享

为了防止同一个用户一个用户可以绑定多个队列)的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源进行限定:

  • 首先,计算每个队列中正在运行的任务数与其应该分得的计算资源之间的比值,选择一个该比值最小的队列(即最闲的);
  • 其次,按照作业优先级和提交时间的顺序,同时考虑用户资源量限制和内存限制对队列内任务排序。

如上图,三个队列同时按照任务的先后顺序依次执行,比如:job11,job21和job31分别排在队列最前面,先运行,也是并行运行。

2.2 参数配置

配置参数主要划分为3块,分别为资源分配相关参数、限制应用程序数目相关参数 、队列访问和权限控制参数

2.2.1 资源分配相关参数

参数 描述
capacity Queue的容量百分比,float类型,例如12.5。所有Queue的各个层级的capacity总和必须为100。因为弹性资源分配,如果集群中有较多的空闲资源,queue中的application可能消耗比此设定更多的Capacity。
maximum-capacity queue capacity最大占比,float类型,此值用来限制queue中的application的弹性的最大值。默认为-1禁用“弹性限制”。
minimum-user-limit-percent 任何时间如果有资源需要,每个queue都会对分配给一个user的资源有一个强制的限制,这个user-limit可以在最大值和最小值之间。此属性就是最小值,其最大值依赖于提交applications的用户的个数。例如:假设此值为25,如果有2个用户向此queue提交application,那么每个用户最多消耗queue资源容量的50%;如果第三个user提交了application,那么任何一个user使用资源容量不能超过queue的33%;4个或者更多的用户参与,那么每个用户资源使用都不会超过queue的25%。默认值为100,表示对没有用户资源限制。
user-limit-factor queue容量的倍数,用来设置一个user可以获取更多的资源。默认值为1,表示一个user获取的资源容量不能超过queue配置的capacity,无论集群有多少空闲资源。此值为float类型。[最多仍不超过maximum-capacity]

2.2.2 限制应用程序数目相关参数

参数 描述
maximum-applications 集群或者队列中同时处于等待和运行状态的应用程序数目上限,这是一个强限制,一旦集群中应用程序数目超过该上限,后续提交的应用程序将被拒绝,默认值为10000。所有队列的数目上限可通过参数yarn.scheduler.capacity.maximum-applications设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity…maximum-applications设置适合自己的值
maximum-am-resource-percent 集群中用于运行应用程序ApplicationMaster的资源比例上限,该参数通常用于限制处于活动状态的应用程序数目。该参数类型为浮点型,默认是0.1,表示10%。所有队列的ApplicationMaster资源比例上限可通过参数yarn.scheduler.capacity. maximum-am-resource-percent设置(可看做默认值),而单个队列可通过参数yarn.scheduler.capacity… maximum-am-resource-percent设置适合自己的值。

2.2.3 队列访问和权限控制参数

参数 描述
state 队列状态可以为STOPPED或者RUNNING,如果一个队列处于STOPPED状态,用户不可以将应用程序提交到该队列或者它的子队列中,类似的,如果ROOT队列处于STOPPED状态,用户不可以向集群中提交应用程序,但正在运行的应用程序仍可以正常运行结束,以便队列可以优雅地退出。
acl_submit_applications 限定哪些Linux用户/用户组可向给定队列中提交应用程序。需要注意的是,该属性具有继承性,即如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序。配置该属性时,用户之间或用户组之间用“,”分割,用户和用户组之间用空格分割,比如“user1, user2 group1,group2”。
acl_administer_queue 为队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 。同样,该属性具有继承性,如果一个用户可以向某个队列中提交应用程序,则它可以向它的所有子队列中提交应用程序

03 配置案例

3.1 指定调度器

首先我们需要在yarn-site.xml上配置指定的调度器:

<property>
    <description>The class to use as the resource scheduler.</description>
    <name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

3.2 配置Queues

注意:配置Queue在capacity-scheduler.xml里配置即可。

CapacityScheduler已经预定义了一个queue(即root):

  • 系统中所有的queue都是root queue的子节点;
  • 其它的queues列表可以通过“yarn.scheduler.capacity.root.queues”中指定,每个queue名称以逗号“,”分割;
  • CapacityScheduler使用了一个称为“queue path”的概念来表示“多级queue”,“queue path”是一个queue层级的全路径,且以“root”开头,路径中以“.”作为分割符。

一个指定 queue 的子节点可以通过“yarn.scheduler.capacity..queues”风格来定义。子节点不从父节点上直接继承properties,除非另有说明。例如,root queuea,b,c三个子节点,以及ab也有自己的sub-queue

在Cloudera Manager页面,进入yarn配置,搜索“shcedule”,选择“容量调度程序配置高级配置代码段(安全阀)”,写入内容,保存:

备注:如果在运行时,添加了queue或者修改了ACLs,可按页面提示刷新。但是删除Queue是不支持的,需要依次重启备用和活动的ResourceManager角色使配置生效。

完整配置如下,已添加注释:

<?xml version="1.0" encoding="UTF-8"?>
<configuration> 
  <!-- root队列中有哪些子队列-->
  <property> 
    <name>yarn.scheduler.capacity.root.queues</name>  
    <value>default,wa,yq</value> 
  </property>  
    <!-- root队列占用的容量百分比-->
  <property> 
    <name>yarn.scheduler.capacity.root.capacity</name>  
    <value>100</value> 
  </property>  
  <!-- 为root队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 -->
  <property> 
    <name>yarn.scheduler.capacity.root.acl_administer_queue</name>  
    <value>admin</value> 
  </property>  
<!-- 限定哪些admin用户可向root队列中提交应用程序 -->
  <property> 
    <name>yarn.scheduler.capacity.root.acl_submit_applications</name>  
    <value>admin</value> 
  </property>
 <!-- root队列中default队列占用的容量百分比
    所有子队列的容量相加必须等于100-->
  <property> 
    <name>yarn.scheduler.capacity.root.default.capacity</name> 
    <value>30</value> 
  </property>  
 <!-- root队列中default队列占用的容量百分比的最大值-->
  <property> 
    <name>yarn.scheduler.capacity.root.default.maximum-capacity</name>  
    <value>35</value> 
  </property>  
  <!-- root队列中wa队列占用的容量百分比
    所有子队列的容量相加必须等于100-->
  <property> 
    <name>yarn.scheduler.capacity.root.wa.capacity</name>  
    <value>45</value> 
  </property>  
 <!-- root队列中wa队列占用的容量百分比的最大值-->
  <property> 
    <name>yarn.scheduler.capacity.root.wa.maximum-capacity</name>  
    <value>50</value> 
  </property>  
 <!-- root队列中yq队列占用的容量百分比
    所有子队列的容量相加必须等于100-->
<property> 
    <name>yarn.scheduler.capacity.root.yq.capacity</name>  
    <value>25</value> 
  </property>  
 <!-- root队列中yq队列占用的容量百分比的最大值-->
  <property> 
    <name>yarn.scheduler.capacity.root.yq.maximum-capacity</name>  
    <value>30</value> 
  </property> 
<!-- 为root队列下的wa队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 --> 
  <property> 
    <name>yarn.scheduler.capacity.root.wa.acl_administer_queue</name>  
    <value>admin,user01</value> 
  </property>  
<!-- 限定哪些admin用户可向root队列中的wa队列提交应用程序 -->
  <property> 
   <name>yarn.scheduler.capacity.root.wa.acl_submit_applications</name>  
    <value>admin,user01</value> 
  </property>  
<!-- 为root队列下的yq队列指定一个管理员,该管理员可控制该队列的所有应用程序,比如杀死任意一个应用程序等 --> 
  <property> 
    <name>yarn.scheduler.capacity.root.yq.acl_administer_queue</name>  
    <value>admin,user02</value> 
  </property>  
<!-- 限定哪些admin用户可向root队列中的yq队列提交应用程序 -->
  <property> 
   <name>yarn.scheduler.capacity.root.yq.acl_submit_applications</name>  
    <value>admin,user02</value> 
  </property>
    <!-- 为Job分配资源时,使用什么策略进行计算 -->  
   <property> 
    <name>yarn.scheduler.capacity.resource-calculator</name>  
  <value>org.apache.hadoop.yarn.util.resource.DominantResourceCalculator</value> 
  </property>  
</configuration>

以上配置生效后可以进入Web UI页面查看,队列设置是否正确,如下所示:

注意:所有队列的capacity容量和为100%

04 文末

本文主要讲解了YARN Capacity Scheduler容量调度器,如果要深入,可以参考官方的文档:

谢谢大家的阅读,本文完!

目录
相关文章
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-容量调度器(Yahoo!的Capacity Scheduler)
详细讲解了Hadoop YARN资源管理中的容量调度器(Yahoo!的Capacity Scheduler),包括队列和子队列的概念、Apache Hadoop的容量调度器默认队列、队列的命名规则、分层队列、容量保证、队列弹性、容量调度器的元素、集群如何分配资源、限制用户容量、限制应用程序数量、抢占申请、启用容量调度器以及队列状态管理等方面的内容。
68 3
|
2月前
|
分布式计算 资源调度 Hadoop
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
详细介绍了Hadoop YARN资源管理中的公平调度器(Fair Scheduler),包括其概述、配置、队列结构、以及如何将作业提交到指定队列,展示了公平调度器如何通过分配文件(fair-scheduler.xml)来控制资源分配,并提供了配置示例和如何通过命令行提交作业到特定队列的方法。
114 0
Hadoop YARN资源管理-公平调度器(Fackbook的Fair Scheduler)
|
3月前
|
图形学 C# 开发者
Unity粒子系统全解析:从基础设置到高级编程技巧,教你轻松玩转绚丽多彩的视觉特效,打造震撼游戏画面的终极指南
【8月更文挑战第31天】粒子系统是Unity引擎的强大功能,可创建动态视觉效果,如火焰、爆炸等。本文介绍如何在Unity中使用粒子系统,并提供示例代码。首先创建粒子系统,然后调整Emission、Shape、Color over Lifetime等模块参数,实现所需效果。此外,还可通过C#脚本实现更复杂的粒子效果,增强游戏视觉冲击力和沉浸感。
148 0
|
2月前
|
资源调度 分布式计算 Hadoop
YARN(Hadoop操作系统)的架构
本文详细解释了YARN(Hadoop操作系统)的架构,包括其主要组件如ResourceManager、NodeManager和ApplicationMaster的作用以及它们如何协同工作来管理Hadoop集群中的资源和调度作业。
102 3
YARN(Hadoop操作系统)的架构
|
2月前
|
资源调度 分布式计算 Hadoop
使用YARN命令管理Hadoop作业
本文介绍了如何使用YARN命令来管理Hadoop作业,包括查看作业列表、检查作业状态、杀死作业、获取作业日志以及检查节点和队列状态等操作。
45 1
使用YARN命令管理Hadoop作业
|
3月前
|
资源调度 分布式计算 算法
【揭秘Yarn调度秘籍】打破资源分配的枷锁,Hadoop Yarn权重调度全攻略!
【8月更文挑战第24天】在大数据处理领域,Hadoop Yarn 是一种关键的作业调度与集群资源管理工具。它支持多种调度器以适应不同需求,默认采用FIFO调度器,但可通过引入基于权重的调度算法来提高资源利用率。该算法根据作业或用户的权重值决定资源分配比例,权重高的可获得更多计算资源,特别适合多用户共享环境。管理员需在Yarn配置文件中启用特定调度器(如CapacityScheduler),并通过设置队列权重来实现资源的动态调整。合理配置权重有助于避免资源浪费,确保集群高效运行,满足不同用户需求。
49 3
|
6月前
|
资源调度 分布式计算 Hadoop
Hadoop Yarn 核心调优参数
这是一个关于测试集群环境的配置说明,包括3台服务器(master, slave1, slave2)运行CentOS 7.5,每台有4核CPU和4GB内存。集群使用Hadoop 3.1.3,JDK1.8。Yarn核心配置涉及调度器选择、ResourceManager线程数、节点检测、逻辑处理器使用、核心转换乘数、NodeManager内存和CPU设置,以及容器的内存和CPU限制。配置完成后,需要重启Hadoop并检查yarn配置。
95 4
|
6月前
|
SQL 分布式计算 资源调度
Hadoop Yarn 配置多队列的容量调度器
配置Hadoop多队列容量调度器,编辑`capacity-scheduler.xml`,新增`hive`队列,`default`队列占总内存40%,最大60%;`hive`队列占60%,最大80%。配置包括队列容量、用户权限和应用生存时间等,配置后使用`yarn rmadmin -refreshQueues`刷新队列,无需重启集群。多队列配置可在Yarn WEB界面查看。
90 4
|
5月前
|
资源调度 分布式计算 Hadoop
实时计算 Flink版产品使用问题之yarn session模式中启动的任务链接是http IP,想把IP映射为主机hadoop,该怎么操作
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStream API、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
6月前
|
分布式计算 资源调度 Hadoop
Hadoop【基础知识 03+04】【Hadoop集群资源管理器yarn】(图片来源于网络)(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
【4月更文挑战第5天】Hadoop【基础知识 03】【Hadoop集群资源管理器yarn】(图片来源于网络)Hadoop【基础知识 04】【HDFS常用shell命令】(hadoop fs + hadoop dfs + hdfs dfs 使用举例)
137 9