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端口,即可看到每个队列中容器具体解释