Ubuntu Hadoop 任务如何调度
小樊
45
2025-12-16 20:01:39
Ubuntu上 Hadoop 任务调度的完整指南
一 调度层次与总体架构
- 在 YARN 上,资源管理与调度由 ResourceManager 负责,调度器是可插拔的,常用有 FIFO Scheduler、Fair Scheduler、Capacity Scheduler。其中 Capacity Scheduler 为 Apache Hadoop 社区与主流发行版的默认调度器,具备最完善的多租户与资源布局能力;Fair Scheduler 支持多级队列、配额与抢占等,但社区发展相对滞后;FIFO 仅适合极简场景。生产环境通常选择 Capacity Scheduler 并结合队列、抢占、全局调度等能力实现资源隔离与高效利用。
二 选择并配置调度器
- 使用 Capacity Scheduler(推荐)
- 核心配置(yarn-site.xml):保持默认或显式设置
- yarn.resourcemanager.scheduler.class:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
- yarn.scheduler.capacity.resource-calculator:org.apache.hadoop.yarn.util.resource.DominantResourceCalculator(启用 DRF,同时考虑内存与 CPU)
- yarn.scheduler.capacity.maximum-am-resource-percent:0.25(提升小应用并发能力)
- yarn.scheduler.capacity.node-locality-delay:-1(降低本地化等待,提高调度吞吐)
- 队列配置(capacity-scheduler.xml):定义多级队列与配额
- 示例:root 下分 prod(40%) 与 dev(60%,最大 75%),实现弹性共享与保障
- 支持队列 ACL、应用数上限、用户配额、弹性资源共享、抢占、以及 Node Labels / Node Attributes / Placement Constraints 等高级能力
- 调度性能优化(按需开启)
- 异步调度:yarn.scheduler.capacity.schedule-asynchronously.enable=true
- 全局调度:yarn.scheduler.capacity.multi-node-placement-enabled=true(面向多节点分配,提升大规模集群调度质量)
- 使用 Fair Scheduler(可选)
- 启用方式(yarn-site.xml):yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
- 指定配置:yarn.scheduler.fair.allocation.file=/path/fair-scheduler.xml
- 队列与策略:支持多级队列、最小/最大资源、ACL、抢占;队列内可选 FIFO/Fair/DRF 等策略
- 提交作业到指定队列:yarn jar your-job.jar … -Dmapreduce.job.queuename=root.offline
- 提示:社区与主流发行版更推荐 Capacity Scheduler,Fair Scheduler 仍可使用但长期演进趋缓。
三 提交与监控作业
- 提交 MapReduce 作业
- 示例:hadoop jar /path/to/your-job.jar com.example.YourJobClass input output
- 指定队列:在命令行加入 -Dmapreduce.job.queuename=your-queue(或在代码中设置)
- 常用运维命令
- 查看应用:yarn application -list
- 查看详情:yarn application -status
- 监控与可视化
- YARN ResourceManager Web UI:http://:8088(查看队列、应用、资源使用与调度器类型)
- 队列与调度器状态可在 UI 中直观核对,便于验证调度配置是否生效。
四 定时调度与编排
- 使用 Cron 定时触发 Hadoop 作业(轻量)
- 在调度节点安装并启动 cron:sudo apt-get install cron;sudo service cron start
- 编写作业脚本(设置 HADOOP_HOME、执行 hadoop jar …),在脚本中显式指定队列
- 配置 crontab:crontab -e,例如每天 00:00 执行:0 0 * * * /path/run-job.sh
- 先手动执行脚本验证,再交由 cron 定时触发
- 使用工作流调度器(复杂依赖与可视化)
- Apache Oozie:与 Hadoop 深度集成,适合 MapReduce/Hive/Spark 等作业的 DAG 编排与定时;安装后在 oozie-site.xml 中配置并启动服务,使用命令行或 Web 提交工作流
- Apache Airflow:以 DAG 为中心的任务编排,可通过 Hadoop 插件/Operator 提交 YARN 作业,适合数据工程与调度治理一体化场景。
五 生产实践要点
- 多租户与资源隔离:使用 多级队列 + Capacity/Fair,为关键业务设置最小资源与 ACL,避免资源被长作业“饿死”
- 抢占与弹性:在资源紧张时启用 队列间/队列内抢占 与 弹性资源共享,兼顾保障与利用率
- 调度性能:开启 异步调度 与(按需)全局调度,在大规模集群中显著降低分配延迟、提升吞吐
- 资源模型:启用 DRF(Dominant Resource Calculator),让内存与 CPU 同时参与调度决策,避免单维瓶颈
- 节点与放置约束:结合 Node Labels / Node Attributes / Placement Constraints 实现分区调度与拓扑感知,减少热点、提升数据局部性。