Ubuntu下Hadoop作业调度怎样实现
导读:Ubuntu下Hadoop作业调度的实现路径 在Ubuntu上,Hadoop作业调度通常分为两个层面:一是集群侧的多租户与队列资源调度(YARN Scheduler),二是按时间或数据触发的工作流/定时调度(如 Oozie、crontab)...
Ubuntu下Hadoop作业调度的实现路径
在Ubuntu上,Hadoop作业调度通常分为两个层面:一是集群侧的多租户与队列资源调度(YARN Scheduler),二是按时间或数据触发的工作流/定时调度(如 Oozie、crontab)。下面给出可直接落地的实现方案与关键配置。
一、集群侧调度 YARN Scheduler 选型与配置
- 调度器类型与适用场景
- FIFO Scheduler:先进先出,简单但不适合多用户/多队列混部。
- Capacity Scheduler:多队列、容量配额、支持队列内资源保障与访问控制,适合生产多团队共享。
- Fair Scheduler:按“池/作业”公平分配资源,支持最小资源保障与权重,适合交互式与批处理并存。
- 启用与配置步骤(以 Capacity Scheduler 为例)
- 在 $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> - 在 $HADOOP_HOME/etc/hadoop/capacity-scheduler.xml 定义队列与容量(示例为单队列 default):
< property> < name> yarn.scheduler.capacity.root.queues< /name> < value> default< /value> < /property> < property> < name> yarn.scheduler.capacity.root.default.capacity< /name> < value> 100< /value> < /property> - 分发配置并重启 YARN:
$HADOOP_HOME/sbin/stop-yarn.sh $HADOOP_HOME/sbin/start-yarn.sh - 提交作业时指定队列(示例):
yarn jar /path/to/your-job.jar com.example.YourJobClass \ -Dmapreduce.job.queuename=default input output - 在 ResourceManager Web UI(http://:8088) 的 Scheduler 页面查看队列与资源分配。
- 在 $HADOOP_HOME/etc/hadoop/yarn-site.xml 指定调度器类:
二、按时间与数据触发的工作流调度
-
使用 Oozie 编排与定时
- 核心概念:**Workflow(工作流)**定义任务依赖DAG;**Coordinator(协调器)**按时间或数据可用性触发工作流;Bundle用于批量管理多个协调器。
- 快速上手(示例目录结构与要点):
- 目录结构
oozie-apps/ └─ mr-wordcount-wf/ ├─ job.properties ├─ workflow.xml └─ lib/(依赖jar) - job.properties(关键项)
nameNode=hdfs://master:8020 oozie.wf.application.path=${ nameNode} /user/${ user} /oozie-apps/mr-wordcount-wf/workflow.xml inputDir=mr-wordcount-wf/input outputDir=mr-wordcount-wf/output - workflow.xml(核心节点)
< workflow-app name="mr-wordcount-wf" xmlns="uri:oozie:workflow:0.5"> < start to="mr-node"/> < action name="mr-node"> < map-reduce> < job-tracker> ${ jobTracker} < /job-tracker> < name-node> ${ nameNode} < /name-node> < configuration> < property> < name> mapreduce.job.queuename< /name> < value> ${ queueName} < /value> < /property> < !-- 其他MR参数 --> < /configuration> < /map-reduce> < ok to="end"/> < error to="fail"/> < /action> < kill name="fail"> < message> Workflow failed< /message> < /kill> < end name="end"/> < /workflow-app> - 提交与定时
# 上传应用 hdfs dfs -mkdir -p /user/${ USER} /oozie-apps/mr-wordcount-wf hdfs dfs -put oozie-apps/mr-wordcount-wf /user/${ USER} /oozie-apps/ # 运行一次 oozie job -oozie http://< oozie-host> :11000/oozie -config oozie-apps/mr-wordcount-wf/job.properties -run # 创建定时协调器(按时间触发,示例为每天2点) # 在 coordinator.xml 中配置 < start> , < end> , < frequency> 与 < dataset> 等 oozie job -oozie http://< oozie-host> :11000/oozie -config coordinator.properties -run
- 目录结构
- 适用场景:多步骤 ETL(如 Sqoop → Hive → MR → 导出)、跨系统依赖、需要数据触发与时间窗口管理的任务。
-
使用 Linux crontab 触发 Hadoop/Hive/Sqoop 脚本
- 适合轻量调度与简单依赖,或作为 Oozie 的补充。
- 示例脚本(run_etl.sh)
#!/usr/bin/env bash set -e LOG=~/etl/run_$(date +%F).log hive -f /home/hadoop/sql/daily_import.hql > > "$LOG" 2> & 1 - 定时(每天 02:00)
crontab -e 0 2 * * * /home/hadoop/bin/run_etl.sh - 提示:为脚本配置 HADOOP_HOME、HIVE_HOME、JAVA_HOME 与日志目录;必要时在脚本内检测上一步退出码并实现重试。
三、监控与运维要点
- 集群资源与队列:通过 ResourceManager Web UI(http://:8088) 查看应用、队列使用与抢占情况;在容量/公平调度下,按队列隔离与保障关键业务。
- 作业与日志:使用命令行查看与跟踪作业状态
yarn application -list yarn application -status < application_id> yarn logs -applicationId < application_id> - 工作流与定时:在 Oozie Web Console(http://:11000/oozie) 查看工作流/协调器执行历史、失败原因与重试策略。
四、方案选型建议
- 多团队共享、强配额与访问控制:优先 Capacity Scheduler + Oozie Coordinator(队列治理 + 时间/数据触发)。
- 交互式与批处理混部、强调公平:选择 Fair Scheduler + Oozie(最小资源保障 + 工作流编排)。
- 轻量任务或遗留脚本:使用 crontab + Shell/Hive/Sqoop,必要时逐步迁移到 Oozie 统一管理。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Ubuntu下Hadoop作业调度怎样实现
本文地址: https://pptw.com/jishu/782549.html
