Hadoop任务调度在Linux怎么做
小樊
38
2025-11-14 23:26:19
Linux上Hadoop任务调度的完整方案
一 核心概念与组件
- 在 Linux 环境中,Hadoop 的任务调度由 YARN(Yet Another Resource Negotiator) 负责,核心组件包括:
- ResourceManager:全局资源管理与调度入口。
- NodeManager:单节点资源管理与容器(Container)生命周期管理。
- ApplicationMaster(AM):每个作业一个 AM,与 RM 协商资源、监控作业进度。
- Container:资源分配的基本单位(封装内存、CPU 等)。
- 调度策略:支持 FIFO、Capacity Scheduler(容量调度器)、Fair Scheduler(公平调度器)。
二 快速上手 提交与监控
- 提交作业
- 使用 hadoop jar 或 yarn jar 提交 MapReduce 作业:
- 示例:
hadoop jar my-job.jar com.example.MyJob input output
- 示例:
yarn jar my-job.jar com.example.MyJob input output
- 常用监控
- YARN Web UI:访问 http://<ResourceManager主机>:8088 查看应用与资源。
- 命令行:
- 查看应用:
yarn application -list
- 查看日志:
yarn logs -applicationId <app_id>
- 查看节点:
yarn node -list
- 关键说明
- 提交后由 ResourceManager 分配首个容器启动 ApplicationMaster,再由 AM 向 RM 申请更多容器完成 Map/Reduce 任务。
三 配置YARN调度器
- 配置文件位置:
$HADOOP_HOME/etc/hadoop/yarn-site.xml
- 选择调度器(示例为容量调度器)
- 设置调度器类:
<property><name>yarn.resourcemanager.scheduler.class</name><value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value></property>
- 指定队列配置:在 capacity-scheduler.xml 中定义队列、容量、ACL 等。
- 公平调度器(Fair Scheduler)
- 使用类:
org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
- 通过 fair-scheduler.xml 配置队列与权重/公平策略。
- 生效方式
- 修改后同步到集群各节点,重启 ResourceManager(必要时滚动重启),通过 Web UI 验证调度器与队列。
四 定时与依赖调度 工作流编排
- Linux 层定时
- 使用 crontab 定期触发脚本(适合简单周期任务):
- 编辑:
crontab -e
- 示例:
*/5 * * * * /opt/scripts/run_etl.sh(每 5 分钟执行)
- Hadoop 生态工作流
- Apache Oozie:支持复杂依赖与工作流,提供 Web 控制台与定时能力。
- Apache Airflow:以 DAG 编排任务,适合跨系统依赖与数据管道。
- Azkaban:轻量级工作流调度,界面化配置与依赖管理。
五 性能与资源调优要点
- 资源配置
- 合理设置容器与任务内存:如 mapreduce.map.memory.mb、mapreduce.reduce.memory.mb,避免 OOM 与资源浪费。
- 根据作业特性设置 Map/Reduce 数量、并发度与 JVM 参数。
- 数据本地化与 Shuffle
- 优先 数据本地化 执行,减少网络开销;优化 Shuffle 缓冲区与压缩(如 Snappy/LZO)。
- 作业特性
- 合理使用 Combiner、减少落盘与网络传输;启用 推测执行 缓解慢节点影响。
- 监控与迭代
- 结合 YARN Web UI 与监控工具(如 Ganglia/Ambari)持续观测与调优。