温馨提示×

Ubuntu下Hadoop任务调度如何实现

小樊
42
2025-11-29 02:48:40
栏目: 智能运维

Ubuntu下Hadoop任务调度的实现路径

在Ubuntu上,Hadoop的作业调度通常分为两个层面:一是YARN层面的资源与作业调度(决定资源如何分配、作业如何排队与抢占),二是工作流与定时调度(决定作业之间的依赖关系与何时运行)。二者可配合使用,既满足多租户与资源隔离,又满足日常批处理编排与定时执行。

YARN内置调度器配置与选择

  • 核心组件与配置文件
    • 资源管理与调度由ResourceManagerNodeManager承担;关键配置集中在**$HADOOP_HOME/etc/hadoop/yarn-site.xml与调度器专属配置文件(如capacity-scheduler.xmlfair-scheduler.xml**)。提交作业可用yarn jarhadoop jar两种方式,二者在YARN模式下等价。
  • 调度器类型与适用场景
    • FIFO Scheduler:先进先出,简单但不适合多用户与多队列场景。
    • Capacity Scheduler:支持多队列与配额,适合多租户与资源隔离,支持队列层级、容量上限、用户限额、ACL等治理能力。
    • Fair Scheduler:按“公平份额”动态分配资源,适合需要公平调度与队列间弹性共享的集群。
  • 启用容量调度器的关键配置示例(yarn-site.xml)
    • 指定调度器类:
      • yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
    • 在capacity-scheduler.xml中定义队列与容量(示例为root下两个队列):
      • yarn.scheduler.capacity.root.queues=default,hadoop
      • yarn.scheduler.capacity.root.default.capacity=30
      • yarn.scheduler.capacity.root.hadoop.capacity=70
      • yarn.scheduler.capacity.root.hadoop.maximum-capacity=100
      • yarn.scheduler.capacity.root.hadoop.user-limit-factor=1
      • yarn.scheduler.capacity.root.default.state=RUNNING
      • yarn.scheduler.capacity.root.hadoop.state=RUNNING
      • 说明:同一层级队列容量之和应为100%;maximum-capacity限制队列在空闲时可扩张的上限;state可动态控制队列启停;可结合ACL进行提交与管理授权。
  • 启用公平调度器的关键配置示例(yarn-site.xml)
    • 指定调度器类:
      • yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
    • 在fair-scheduler.xml中定义队列、权重与最小份额等策略,实现按权重或需求的公平分配(具体策略与参数依业务与版本而定)。

工作流与定时调度工具选型与落地

  • Linux Crontab
    • 适用:简单的定时批处理;缺点:不擅长依赖编排(需自行实现锁与状态管理)。
    • 示例:0 2 * * * /opt/hadoop/bin/yarn jar /opt/jars/etl.jar com.example.ETLJob /data/in /data/out
  • Apache Oozie
    • 适用:Hadoop生态的工作流编排定时/事件触发(如每天05:00或目录到达触发),支持MapReduce、Hive、Sqoop、Shell、子流程、Fork/Join等。
    • 要点:工作流以XML定义(hPDL),需将应用与依赖上传至HDFS,通过Oozie命令或Web提交与监控;适合ETL与复杂依赖链路。
  • Apache Airflow
    • 适用:基于DAG的通用数据工作流编排,可通过Hadoop/Hive/Spark等Operator提交任务,具备丰富的定时与依赖能力,便于与Python生态集成。
  • Azkaban
    • 适用:轻量级作业依赖调度,上手快,适合中小规模编排场景。

提交与监控的常用操作

  • 提交作业
    • 示例:yarn jar /opt/jars/wordcount.jar com.example.WordCount /input /output
  • 查看与监控
    • 查看应用:yarn application -list
    • 查看状态:yarn application -status <application_id>
    • 资源与作业监控:YARN ResourceManager Web UI(默认8088端口),可查看队列、应用、容器与日志。

性能与稳定性优化要点

  • 数据本地化:优先在数据所在节点执行任务,减少网络开销。
  • 资源与容器:合理设置mapreduce.map.memory.mbmapreduce.reduce.memory.mb与容器资源,避免OOM与资源争用。
  • Shuffle与压缩:调优Shuffle内存与并发,适度使用Snappy/LZO等压缩减少I/O与网络。
  • 推测执行:开启Speculative Execution缓解慢节点影响。
  • 存储参数:结合访问模式调整HDFS块大小副本因子,平衡吞吐与成本。
  • 计算框架选择:迭代/低延迟场景可考虑TezSpark替代MapReduce。

0