YARN容量调度器
外观
YARN容量调度器[编辑 | 编辑源代码]
YARN容量调度器(Capacity Scheduler)是Apache Hadoop YARN中的一种多租户资源调度器,专为共享、多租户集群环境设计。它通过划分集群资源为多个逻辑队列(称为“容量队列”),允许不同组织或团队按需分配资源,同时保证最低资源保障和弹性扩展能力。
核心特性[编辑 | 编辑源代码]
- 队列层次结构:支持树形队列划分,父队列可嵌套子队列。
- 资源隔离:每个队列分配固定比例的集群资源(如CPU、内存),避免资源抢占。
- 弹性分配:空闲资源可被其他队列临时借用,提高利用率。
- 多租户支持:通过ACL(访问控制列表)限制用户/组对队列的访问权限。
- 动态配置:支持运行时修改队列属性(需管理员权限)。
工作原理[编辑 | 编辑源代码]
容量调度器通过以下机制实现资源分配:
- 资源请求匹配:应用向ResourceManager提交资源请求(如容器需求)。
- 队列选择:根据配置的队列层次和ACL规则,将请求路由到对应队列。
- 资源分配:按队列容量比例分配资源,优先满足有保障的容量,空闲资源可共享。
配置示例[编辑 | 编辑源代码]
以下是一个典型的
capacity-scheduler.xml
配置片段:
<configuration>
<!-- 定义根队列 -->
<property>
<name>yarn.scheduler.capacity.root.queues</name>
<value>prod,dev</value>
</property>
<!-- 生产队列分配60%资源 -->
<property>
<name>yarn.scheduler.capacity.root.prod.capacity</name>
<value>60</value>
</property>
<!-- 开发队列分配40%资源 -->
<property>
<name>yarn.scheduler.capacity.root.dev.capacity</name>
<value>40</value>
</property>
<!-- 允许开发队列借用空闲资源 -->
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>80</value>
</property>
</configuration>
数学建模[编辑 | 编辑源代码]
队列的资源分配满足以下约束条件:
- 每个队列的容量 满足
- 实际资源分配 在空闲时为
实际案例[编辑 | 编辑源代码]
场景:某公司集群同时运行生产作业(高优先级)和开发测试作业(低优先级)。
- 解决方案:
# 创建
prod
和
dev
队列,分别分配70%和30%资源。 # 设置
{{{1}}}
,允许开发任务在非高峰期借用20%额外资源。 # 为
prod
队列配置ACL,仅允许生产团队提交作业。
高级功能[编辑 | 编辑源代码]
- 资源限制:可设置队列的防止单个用户独占资源。
minimum-user-limit-percent
- 标签调度:将节点标记为特定类型(如GPU节点),队列可指定需要的标签。
- 优先级调度:队列内任务可按优先级分配资源。
常见问题[编辑 | 编辑源代码]
Q: 如何防止某个队列耗尽集群资源?
A: 通过设置
maximum-capacity
限制队列的最大资源占比,例如:
<property>
<name>yarn.scheduler.capacity.root.dev.maximum-capacity</name>
<value>50</value>
</property>
Q: 如何动态更新队列配置? A: 使用YARN命令(需刷新队列):
yarn rmadmin -refreshQueues
最佳实践[编辑 | 编辑源代码]
- 为关键业务设置独立的队列,并分配有保障的容量。
- 监控队列资源使用率,定期调整容量分配。
- 对测试环境队列设置较低的,避免影响生产。
maximum-capacity