温馨提示×

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 实现分区调度与拓扑感知,减少热点、提升数据局部性。

0