Debian上Hadoop YARN资源调度策略与落地实践
一 调度器选型与适用场景
- FIFO Scheduler:按提交顺序执行,简单但不支持多租户与资源共享,生产环境基本不推荐。
- Fair Scheduler:强调多租户公平,支持多级队列、配额、ACL、抢占、预留等;曾是CDH的默认,但社区当前更建议迁移到Capacity Scheduler。
- Capacity Scheduler:Apache Hadoop社区、HDP与CDP的默认调度器,功能最完备,支持多级队列、弹性共享、抢占、以及Node Labels、Node Attributes、Placement Constraints、全局调度等高级特性,适合复杂共享集群与大规模场景。
说明:HDFS不直接做资源调度,资源与调度由YARN负责;调度器是可插拔组件,三者以插件形式接入YARN的ResourceManager。
二 关键对比一览
| 维度 |
FIFO |
Fair Scheduler |
Capacity Scheduler |
| 多租户与队列 |
不支持,仅Default队列 |
支持多级队列、配额、ACL |
支持多级队列、配额、ACL |
| 资源共享 |
无 |
支持弹性共享 |
支持弹性共享(Capacity/MaxCapacity) |
| 抢占与预留 |
不支持 |
支持抢占与预留 |
支持抢占与预留 |
| 高级调度 |
无 |
无分区/节点属性/放置约束 |
支持Node Labels、Node Attributes、Placement Constraints、全局调度 |
| 典型场景 |
极简测试 |
多用户公平、中小规模 |
生产级多租户、大规模与复杂约束 |
以上差异与定位来自YARN官方与厂商实践文档的归纳。
三 Capacity Scheduler落地要点(Debian环境)
- 启用与基础配置(yarn-site.xml)
- 指定调度器类:默认即CapacityScheduler(可不显式设置)。
- 选择资源计算模型:建议启用DominantResourceCalculator以同时考虑内存与CPU。
- 控制并发与AM占比:如将maximum-am-resource-percent提升到0.25(默认0.1),以支持更多并发应用(需结合队列与集群规模评估)。
- 本地性:若网络/磁盘不再是瓶颈,可将yarn.scheduler.capacity.node-locality-delay设为**-1**以提升调度吞吐。
- 队列规划与配额(capacity-scheduler.xml)
- 以树形结构规划队列(如 root.dev、root.test),为每个队列配置capacity与maximum-capacity(百分比),实现保障与上限的双边界。
- 控制应用与AM:设置maximum-applications与队列级maximum-am-resource-percent,避免AM占用过多资源导致并发受限。
- 多租户与合规:通过ACL限制队列的提交与管理权限;必要时配置state=STOPPED/ RUNNING实现优雅下线。
- 调度性能与热点治理
- 开启异步调度:yarn.scheduler.capacity.schedule-asynchronously.enable=true(默认单线程即可)。
- 启用全局调度:yarn.scheduler.capacity.multi-node-placement-enabled=true;大规模集群建议开启节点排序缓存(如sorting-interval.ms=1000)。
- 关闭每心跳多分配:yarn.scheduler.capacity.per-node-heartbeat.multiple-assignments-enabled=false,降低节点“热点堆叠”风险。
- 抢占与弹性
- 在资源紧张且业务有强保障诉求时启用队列间/队列内抢占与预留抢占,保障SLA;需评估抢占阈值与超时,避免频繁回收导致抖动。
以上配置项与建议值可直接用于Debian上的Apache Hadoop 3.x集群,按业务规模与负载微调。
四 Fair Scheduler落地要点(如已采用)
- 启用方式(yarn-site.xml)
- 指定调度器类:yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler。
- 指定分配文件:yarn.scheduler.fair.allocation.file=fair-scheduler.xml(XML定义队列、用户、权重、ACL、抢占等)。
- 核心能力与典型配置
- 队列与策略:支持多级队列;队列内可选fair/fifo/drf;可按weight与minResources保障小队列/关键业务。
- 抢占与本地性:通过yarn.scheduler.fair.preemption开启抢占;locality.threshold.node/rack控制等待本地/机架机会的次数。
- 运行时管理:支持修改allocation文件后自动重载(秒级),并通过RM Web UI查看队列与公平份额。
- 适用建议
- 适合强调“用户/队列间公平”的中小规模多租户场景;若需Node Labels/Placement Constraints/全局调度等能力,优先考虑迁移至Capacity Scheduler。
五 监控与持续优化
- 监控与告警
- 关注RM Web UI与指标:队列Used/Guaranteed/MaxCapacity、应用Pending/Running、AM资源占比、抢占与预留事件、节点资源利用率与热点分布。
- 调优方向
- 容器与AM规格:结合作业类型设置合理的容器内存/CPU与AM比例,避免“小作业被AM占满”或“大作业容器过小”。
- 数据本地性与布局:优先提升数据本地化,必要时利用Node Labels做异构资源/专用硬件分区。
- 负载与弹性:结合抢占与弹性共享平衡SLA与利用率;高峰期控制队列最大占用,避免雪崩。
- 调度性能:在大规模集群启用异步/全局调度并合理设置缓存刷新间隔,避免调度成为瓶颈。
这些实践与Hadoop性能调优、工作负载管理与监控思路一致,可在Debian环境中直接落地。