温馨提示×

Linux系统中Hadoop如何进行任务调度

小樊
37
2025-11-28 21:12:35
栏目: 智能运维

Linux系统中Hadoop任务调度实践

一 核心架构与关键角色

  • Linux 上,Hadoop 通过 YARN(Yet Another Resource Negotiator) 完成资源管理与作业调度。提交作业后,由 ResourceManager 全局统筹资源,单个节点上的 NodeManager 负责容器生命周期管理;每个应用会启动一个 ApplicationMaster(AM)ResourceManager 协商资源,并在 NodeManager 上按需拉起 Container 执行 Map/Reduce 任务。作业进度与资源使用可通过 ResourceManager Web UI(默认端口 8088) 查看。

二 调度器选型与对比

  • YARN 的调度器是可插拔组件,常用有 FIFO SchedulerFair SchedulerCapacity Scheduler。下表概述差异与适用场景:
调度器 核心特性 适用场景 备注
FIFO Scheduler 单队列、先进先出 极简测试/演示 不支持多租户与队列隔离,生产不推荐
Fair Scheduler 多级队列、配额/ACL、弹性共享、抢占、异步调度 多租户、强调公平 社区建议迁移到 CapacityScheduler
CapacityScheduler 多级队列、配额/ACL、弹性共享、全局调度、支持 Node Labels/Node Attributes/Placement Constraints 生产多租户、强隔离与资源布局优化 社区与主流发行版(如 CDP/EMR)默认
  • 选型建议:生产环境优先 CapacityScheduler;如需历史兼容可保留 FairSchedulerFIFO 仅用于最简场景。

三 配置与使用步骤

  • 启用调度器(以 CapacityScheduler 为例)
    • $HADOOP_HOME/etc/hadoop/yarn-site.xml 设置:
      • yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    • capacity-scheduler.xml 中定义队列与容量(示例:root 下 prod 40%dev 60%;dev 下再分子队列 eng/science;可设置 maximum-capacity 限制弹性上限)。
  • 启用调度器(以 FairScheduler 为例)
    • 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
    • fair-scheduler.xml 中定义队列、minResources/maxResources、ACL、maxRunningApps 等。
  • 提交作业与监控
    • 提交方式:
      • hadoop jar your-job.jar com.example.YourJob input output
      • 或 yarn jar your-job.jar com.example.YourJob input output
    • 监控方式:
      • ResourceManager Web UI:http://<RM_HOST>:8088
      • 命令行:yarn application -list / yarn application -status <app_id>。

四 多租户队列与资源控制要点

  • 使用 CapacityScheduler 时,通过 队列层级 + 容量/最大容量 + ACL 实现多租户隔离与配额管理;可设置队列的 弹性上限(maximum-capacity) 避免单一队列长期占用空闲资源。
  • 利用 FairScheduler多级队列、配额/ACL、弹性共享、抢占 等能力,为不同团队/应用提供差异化 SLO。
  • 在复杂资源布局下,结合 Node Labels/Node Attributes/Placement Constraints 做分区与亲和性调度,减少热点、提升资源利用率(CapacityScheduler 支持)。

五 作业级调优与常见建议

  • 资源与容器
    • 合理设置容器与任务内存/CPU:如 mapreduce.map.memory.mbmapreduce.reduce.memory.mb,避免 OOM 与过度申请;结合数据规模与 Shuffle 压力设置并发度。
  • 数据局部性与 I/O
    • 优先 数据本地化 执行;根据访问模式调整 HDFS 块大小/副本因子;对中间/输出数据启用 压缩(如 Snappy/LZO) 降低 I/O 与网络开销。
  • 执行策略
    • 开启 推测执行(Speculative Execution) 缓解慢节点;在合适场景使用 动态资源分配 提升利用率。
  • 工作流编排
    • 对跨作业依赖与定时调度,使用 Apache OozieApache AirflowCron 进行编排与监控。

0