Hadoop在Linux上的任务调度如何操作
小樊
41
2025-12-06 16:40:46
Hadoop在Linux上的任务调度操作指南
一 核心概念与调度器选择
- 在 Linux 上,Hadoop 的作业调度由 YARN 负责:由 ResourceManager 做全局资源管理与调度,NodeManager 管理单节点资源并启动 Container 运行任务,每个作业对应一个 ApplicationMaster 与 RM 协商资源并监控执行。调度策略可在 yarn-site.xml 中配置,常用有 FIFO、Capacity Scheduler(多租户配额)与 Fair Scheduler(队列间公平分配)。提交作业可用 hadoop jar 或 yarn jar,通过 ResourceManager Web UI(默认端口 8088) 查看状态与日志。
二 快速上手步骤
- 配置与启动
- 在 $HADOOP_HOME/etc/hadoop 下编辑核心配置:
- yarn-site.xml:设置 yarn.resourcemanager.hostname、yarn.nodemanager.aux-services=mapreduce_shuffle。
- mapred-site.xml:设置 mapreduce.framework.name=yarn。
- 启动集群:start-dfs.sh、start-yarn.sh。
- 提交与监控
- 提交作业:
hadoop jar your-job.jar com.example.Main input output 或 yarn jar your-job.jar com.example.Main input output。
- 查看与监控:
yarn application -list、yarn application -status <app_id>,以及 http://:8088。
三 配置调度器与队列
- 选择调度器(示例为 Capacity Scheduler)
- 在 yarn-site.xml 指定:
yarn.resourcemanager.scheduler.class=org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
- 在 $HADOOP_HOME/etc/hadoop/capacity-scheduler.xml 定义队列与容量(示例):
- 队列 root 下创建 default 与 etl 队列;
- 设置
yarn.scheduler.capacity.root.queues=default,etl;
- 设置容量
yarn.scheduler.capacity.root.default.capacity=60、yarn.scheduler.capacity.root.etl.capacity=40;
- 设置最大容量
yarn.scheduler.capacity.root.default.maximum-capacity=80、yarn.scheduler.capacity.root.etl.maximum-capacity=100;
- 可选:为用户/组设置 ACL 与抢占策略。
- 提交到指定队列:
- 命令行:
yarn jar your-job.jar ... -Dmapreduce.job.queuename=etl
- 或在代码中通过
Configuration.set("mapreduce.job.queuename", "etl") 设置。
四 定时与依赖调度
- Linux 层定时(简单场景)
- 使用 crontab -e 定时执行脚本,脚本内调用
hadoop jar 或 yarn jar;注意环境变量、日志重定向与幂等性(避免重复写入同一输出路径)。
- Hadoop 生态工作流调度(复杂依赖与周期)
- Apache Oozie:用 Workflow 定义任务依赖,用 Coordinator 实现基于时间的周期调度(如每日/每小时);适合 ETL、多作业编排。
- Apache Airflow:以 DAG 编排 Hadoop 作业(通过 HiveOperator/SparkSubmitOperator/SSHOperator 等),具备丰富的依赖与监控能力。
五 常用命令与监控优化
- 常用命令
- 查看应用:
yarn application -list
- 查看状态:
yarn application -status <app_id>
- 查看日志:
yarn logs -applicationId <app_id>
- 访问 ResourceManager UI:http://:8088 查看调度、队列与容器资源使用。
- 性能与稳定性优化
- 资源与本地化:合理设置容器内存与 vcore(如 mapreduce.map.memory.mb、mapreduce.reduce.memory.mb),提升数据本地化比例。
- Shuffle 与压缩:调大 shuffle 缓冲、启用中间数据压缩(如 Snappy/LZO),减少 I/O 与网络。
- 作业策略:合理使用 Combiner、减少落盘与传输数据量,必要时开启 推测执行 应对慢节点。