当前位置: 代码迷 >> 综合 >> YARN 三大调度器 之 Capacity Schedule 容器调度器
  详细解决方案

YARN 三大调度器 之 Capacity Schedule 容器调度器

热度:80   发布时间:2023-12-29 14:48:21.0

Capacity Schedule 

先上官网链接:https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/CapacityScheduler.html

本帖基本来自官方文档~细改了翻译,字有点多,多为文字描述= =慢慢看

另一篇:YARN 三大调度器 之 Fair Schedule 公平调度器

概述

Hadoop的可插拔调度器,允许多租户安全地共享一个大集群,以便在分配容量的约束下及时为应用应 用程序分配资源。

被设计来以共享、多租户的形式运行hadoop应用程序,在友好规则下,能够更大限度地提高集群的吞 吐量和利用率。

Capacity Schedule调度器以队列为单位划分资源。简单通俗点来说,就是一个个队列有独立的资源, 队列的结构和资源是可以进行配置的,如下图:

default队列占30%资源,analyst和dev分别占40%和30%资源;类似的,analyst和dev各有两个子队 列,子队列在父队列的基础上再分配资源。

队列以分层方式组织资源,设计了多层级别的资源限制条件以更好的让多用户共享一个Hadoop集群,比 如队列资源限制、用户资源限制、用户应用程序数目限制。队列里的应用以FIFO方式调度,每个队列可 设定一定比例的资源最低保证和使用上限,同时,每个用户也可以设定一定的资源使用上限以防止资源 滥用。而当一个队列的资源有剩余时,可暂时将剩余资源共享给其他队列。 

九个特性

Hierarchical Queues 分层队列;支持层级队列来确保资源在子队列间共享。

Capacity Guarantees 容量保证;所有提交到队列的的应用程序都将能保证获取到资源,管理员可以配置soft 和硬件资源分配到每个队列的限制。

Security 安全性;每个队列有严格的 ACLs权限控制,允许那些用户提交到某个队列,那些用户不能看看或者 修改其他人的应用等。

Elasticity弹性;弹性特性允许闲置资源能被任何队列分配到。

Multi-tenancy多租户;一系列全面的限制,防止单个应用程序、单用户和队列独占队列或集群的所 有资源,以确保集群不会不堪重负。

Operability 可操作性;

  • 运行时配置:运行时可以配置队列的定义、属性修改等操作,比如容量、acl修改
  • 作业保障:管理员停止队列时,保障正在运行的应用程序运行完成,保障其他新的应用程序不能提交到 队列或者子队列。

Resource-based Scheduling 基于资源调度;支持密集型资源应用程序,这种程序能够比默认的情 况下获取更多的资源。

Queue Mapping based on User or Group 基于用户或组的队列映射;允许用户根据用户或组将作业映射到指定的队列。

Priority Scheduling 优先级调度;允许以不同的优先级提交和调度应用程序,更大值则则证明应用程序优先级更 高。当前应用程序优先级仅支持FIFO排序策略。

调度器和队列配置

调度器配置

要配置ResourceManager以使用CapacityScheduler,请在conf / yarn-site.xml中设置以下属性:

属性
yarn.resourcemanager.scheduler.class org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler

注意,yarn默认使用该队列,可参考默认配置文件中对应的属性。

队列配置

hadoop安装目录下的etc/hadoop/capacity-scheduler.xml 该配置文件是 CapacityScheduler 的配置文件。 

CapacityScheduler 有一个预定义队列叫root,系统中所有的队列是root队列的一个子队列。

更多的队列可以通过配置 yarn.scheduler.capacity.root.queues 该属性来配置,多个子队列 使用","来分割。

CapacityScheduler有一个概念叫queue path,是用来配置队列层级的,这个queue path是队列的 层级,使用root开始,然后用"."来进行连接。比如root.a。

队列的子队列可使用 yarn.scheduler.capacity.<queue-path>.queues 来配置。除非另有申 明,否则子元素不能直接从父元素继承属性。 

配置例子:

如下是3个顶级子队列,分别为a,b,c,还有a和b有自己的子队列,配置如下:

<property> <name>yarn.scheduler.capacity.root.queues</name><value>a,b,c</value>
</property><property><name>yarn.scheduler.capacity.root.a.queues</name><value>a1,a2</value>
</property><property><name>yarn.scheduler.capacity.root.b.queues</name><value>b1,b2,b3</value>
</property>

队列属性

属性太多太多太多太多太多了,想具体修改的童鞋去官网翻译一下吧- -

但大体分为以下几类

  • Resource Allocation(资源配置)
  • Running and Pending Application Limits(运行和依赖程序的限制)
  • Queue Administration & Permissions(队列管理和权限)
  • Queue Mapping based on User or Group(基于用户和组的应用程序队列映射)
  • Queue lifetime for applications(应用程序在队列中的生命周期)

配置实例

yarn-site.xml

<property><name>yarn.resourcemanager.scheduler.class</name>                                       <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>

件capacity-scheduler.xml

<property><name>yarn.scheduler.capacity.maximum-am-resource-percent</name><value>0.1</value><description>Maximum percent of resources in the cluster which can be used to run application masters i.e. controls number of concurrent running applications.</description>
</property><property><name>yarn.scheduler.capacity.resource-calculator</name>    <value>org.apache.hadoop.yarn.util.resource.DefaultResourceCalculator</value><description>The ResourceCalculator implementation to be used to compare Resources in the scheduler.The default i.e. DefaultResourceCalculator only uses Memory while DominantResourceCalculator uses dominant-resource to compare multi-dimensional resources such as Memory, CPU etc.</description>
</property><!--修改如下-->
<property><name>yarn.scheduler.capacity.root.queues</name><value>default,dev,pro</value><description>The queues at the this level (root is the root queue).</description>
</property><property><name>yarn.scheduler.capacity.root.default.capacity</name><value>50</value><description>Default queue target capacity.</description>
</property><!--增加如下-->
<property><name>yarn.scheduler.capacity.root.dev.capacity</name><value>20</value><description>Default queue target capacity.</description>
</property><property><name>yarn.scheduler.capacity.root.pro.capacity</name><value>30</value><description>Default queue target capacity.</description>
</property><!--增加修改完毕-->
<property><name>yarn.scheduler.capacity.root.default.user-limit-factor</name><value>1</value><description>Default queue user limit a percentage from 0.0 to 1.0.</description>
</property>

 mv ./etc/hadoop/mapred-queues.xml.template ./etc/hadoop/mapred-queues.xml
 

<queue><name>pro</name><properties><property key="capacity" value="200"/><property key="user-limit" value="8"/></properties>
</queue><queue><name>dev</name><properties><property key="capacity" value="200"/><property key="user-limit" value="8"/></properties></queue>
</queues>

将两个配置文件分发到各个服务器的配置目录中

重新启动集群start-all.sh

访问8080端口,即可看到每个队列中容器具体解释

  相关解决方案