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 运行原理

890cfb334cc7427597bf0699e5de6840.png


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


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 资源分配相关参数

微信截图_20221012142012.png


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

微信截图_20221012142029.png


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

微信截图_20221012142046.png


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 queue有a,b,c三个子节点,以及a和b也有自己的sub-queue。


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

8dfe9692ee5f4a5b9c5a15f18a17e624.png


备注:如果在运行时,添加了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页面查看,队列设置是否正确,如下所示:

7cb35879283b47edb659e75cbb7ac960.png


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


04 文末


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



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


目录
相关文章
|
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月前
|
Kubernetes 算法 调度
在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
在k8S中,Scheduler使用哪两种算法将Pod绑定到worker节点?
|
6月前
|
资源调度 分布式计算 安全
YARN的FIFO调度器和Capacity Scheduler调度器在资源分配上有何区别?
【6月更文挑战第20天】YARN的FIFO调度器和Capacity Scheduler调度器在资源分配上有何区别?
86 11
|
6月前
|
资源调度 分布式计算 安全
FIFO调度器和Capacity Scheduler调度器各自有哪些特点?
【6月更文挑战第20天】FIFO调度器和Capacity Scheduler调度器各自有哪些特点?
66 7
|
6月前
|
资源调度 分布式计算 Hadoop
YARN中的资源调度主要通过其调度器(Scheduler)实现
【6月更文挑战第20天】YARN中的资源调度主要通过其调度器(Scheduler)实现
87 5
|
资源调度 分布式计算 Hadoop
YARN Capacity Scheduler容量调度器(超详细解读)
YARN Capacity Scheduler容量调度器(超详细解读)
1115 0
|
资源调度 分布式计算 监控
YARN调度器(Scheduler)详解
Yarn调度器是什么,怎样配置呢。
926 0
YARN调度器(Scheduler)详解
|
XML 大数据 调度
|
资源调度 分布式计算 Hadoop

热门文章

最新文章