一、特点
1) 层级队列:在其他队列被运行使用空闲资源之前,层级队列可确保资源在改组织的子队列之间被共享,从而提供更多的可控制性和可预测性
2) 容量保证:每个队列都分配了一部分容量,它们可以支配这部分资源。所有应用程序提交到一个特定队列,它将有权使用分给该队列的资源。管理员可以配置每个队列容量的最低保证和资源使用上限。
3) 安全性:每个队列都有严格的ACL(控制访问列表),它可以控制用户提交应用程序到特定队列上。同时确保某一用户不能查看或修改其他用户提交的应用程序,并且支持队列管理员和集群系统管理员的设置。
4) 灵活性:空闲的资源可以分配给任何队列,包括分配给超出队列需要的资源,保证了资源的可预测性和弹性。
5) 多用户性:支持多用户共享集群,防止单个应用程序、用户或队列独占队列或集群的全部资源。
6) 可操作性:支持运行时配置和停止队列。如果有一个终端提供给管理员和用户来查看当前分配各个队列的资源,管理员也可以在运行时添加队列,但是队列不能在运行时删除。管理员可以停止运行的队列,同时保证队列上的任务运行完成,而新的任务不会提交到队列上。如果一个队列是stopped状态,新的应用程序不能被提交到该队列或者它的子队列上,而队列上现有的任务会一直运行完成。管理员也可以启动一个处于stopped状态的队列。
7) 基于资源的调度:支持资源密集型应用程序,在一个应用程序中可以选择指定比默认需求高的资源,因此可以支持不同资源需求的应用程序。
二、配置
1) 配置Resourcemanager
在conf/yarn-site.xml中配置属性yarn.resourcemanager.scheduler.class,值为org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler。
2) 配置队列
在conf/capacity-scheduler.xml文件中配置,如给定队列的子队列可配置为:yarn.scheduler.capacity.<queue-path>.queues。子队列不会直接从父队列继承属性,除非另有声明。
例如2个顶层的子队列a,b及一些子队列,配置如下:
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>a,b</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</value>
</property>
3) 队列属性
资源分配相关属性:(前缀为yarn.scheduler.capacity.<queue-path>.)
capacity 队列的资源容量
maximum-capacity 队列资源使用上限
minimum-user-limit-percent 每个用户的最低资源保证
user-limit-factor 每个用户最多可使用的资源量
限制运行中和待运行的应用程序有关的属性:
Yarn.scheduler.capacity.<queue-path>.maximum-applications 允许集群或者队列中同时处于等待和运行状态的应用程序的数目的最大值,一旦超过该值,后面提交的作用将被拒绝。
Yarn.scheduler.capacity.<queue-path>.maximum-am-resource-percent 允许集群中用户允许应用程序applicationMaster的资源比例的最大值,用来限制处于活动状态的应用程序的数目
队列管理和权限相关的属性:
Yarn.scheduler.capacity.<queue-path>.state 队列状态,可以为stopped状态或者running状态
Yarn.scheduler.capacity.root.<queue-path>.acl_submit_applications 指定可以给该队列提交应用程序的用户或者用户组
Yarn.scheduler.capacity.root.<queue-path>.acl_administer_queue 指定一个队列管理员,该管理员具有管理所有应用程序的权限
4)管理:更队列属性和添加新队列
修改完配置文件conf/capacity-scheduler.xml后执行命令
$HADOOP_YARN_HOME/bin/yarn rmadmin -refreshQueues