Ubuntu下Hadoop任务调度的实现路径
在Ubuntu上,Hadoop的作业调度通常分为两个层面:一是YARN层面的资源与作业调度(决定资源如何分配、作业如何排队与抢占),二是工作流与定时调度(决定作业之间的依赖关系与何时运行)。二者可配合使用,既满足多租户与资源隔离,又满足日常批处理编排与定时执行。
YARN内置调度器配置与选择
- 核心组件与配置文件
- 资源管理与调度由ResourceManager与NodeManager承担;关键配置集中在**$HADOOP_HOME/etc/hadoop/yarn-site.xml与调度器专属配置文件(如capacity-scheduler.xml或fair-scheduler.xml**)。提交作业可用yarn jar或hadoop 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.mb、mapreduce.reduce.memory.mb与容器资源,避免OOM与资源争用。
- Shuffle与压缩:调优Shuffle内存与并发,适度使用Snappy/LZO等压缩减少I/O与网络。
- 推测执行:开启Speculative Execution缓解慢节点影响。
- 存储参数:结合访问模式调整HDFS块大小与副本因子,平衡吞吐与成本。
- 计算框架选择:迭代/低延迟场景可考虑Tez或Spark替代MapReduce。