阅读量:0
在 Ubuntu 上调度 Hadoop 作业的实用方案
一、调度层次与适用场景
- 系统级定时:使用 Cron 或 systemd timer 在 Ubuntu 上定时触发脚本,脚本内部用命令行提交 Hadoop 作业。优点是简单通用;缺点是依赖 shell、缺少依赖管理与可视化。
- 工作流编排:使用 Apache Oozie(重量级、基于 XML、适合 ETL、支持时间/数据触发)或 Azkaban(轻量级、基于 Properties/YAML、依赖管理清晰、Web UI 友好)。
- 数据平台调度:使用 Apache Airflow(可编程 DAG、丰富的 Operator、与 Hadoop 生态集成良好)。
- 集群资源调度:在 YARN 层选择 FIFO、Fair Scheduler 或 Capacity Scheduler,实现队列隔离、权重与抢占,保证多用户/多业务公平或按容量使用资源。
二、快速上手路径
- 方案A(系统级定时 + 命令行)
- 准备作业脚本 run_wordcount.sh:
#!/usr/bin/env bash set -e INPUT=/data/input/$(date -d "yesterday" +%Y-%m-%d) OUTPUT=/data/output/wordcount/$(date +%Y-%m-%d) hadoop fs -rm -r -f "$OUTPUT" yarn jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount "$INPUT" "$OUTPUT"- 赋予执行权限并加入定时:
chmod +x run_wordcount.sh # 每天 02:00 执行 (crontab -l 2>/dev/null; echo "0 2 * * * /opt/scripts/run_wordcount.sh >> /var/log/hadoop/wordcount.log 2>&1") | crontab - - 方案B(工作流编排 Azkaban 最小可用)
- 安装与启动:准备 JDK 1.8+、关系型数据库(如 MySQL),构建 Azkaban(Gradle 构建),选择 solo-server 或 two/multiple-executor 模式并初始化数据库。
- 定义作业流:创建项目与 .job 文件(示例 job1.job):
type=command command=/opt/scripts/run_wordcount.sh- 打包上传(.zip),在 Web UI 配置调度(如每日 02:00),上线运行并查看日志与告警。
三、YARN 队列与资源调度配置
- 使用 Capacity Scheduler(示例:创建 root.hive 队列,额定 60%,上限 80%):
在 $HADOOP_HOME/etc/hadoop/capacity-scheduler.xml 增加:分发配置后执行:<property> <name>yarn.scheduler.capacity.root.hive.capacityname> <value>60value> property> <property> <name>yarn.scheduler.capacity.root.hive.user-limit-factorname> <value>1value> property> <property> <name>yarn.scheduler.capacity.root.hive.maximum-capacityname> <value>80value> property> <property> <name>yarn.scheduler.capacity.root.hive.statename> <value>RUNNINGvalue> property> <property> <name>yarn.scheduler.capacity.root.hive.acl_submit_applicationsname> <value>*value> property> <property> <name>yarn.scheduler.capacity.root.hive.acl_administer_queuename> <value>*value> property>
提交作业到指定队列:yarn rmadmin -refreshQueueshadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar \ wordcount -D mapreduce.job.queuename=hive /input /output - 使用 Fair Scheduler:在 yarn-site.xml 指定调度器与配置文件:
在 fair-scheduler.xml 定义队列、权重、最小/最大资源、抢占等策略,然后分发并重启 ResourceManager 或刷新队列。<property> <name>yarn.resourcemanager.scheduler.classname> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairSchedulervalue> property> <property> <name>yarn.scheduler.fair.allocation.filename> <value>/etc/hadoop/fair-scheduler.xmlvalue> property>
四、监控与运维要点
- 作业与资源监控:使用 YARN ResourceManager Web UI(默认 8088 端口)查看应用状态、日志与资源使用;必要时结合 Ganglia、Ambari 或 Cloudera Manager 做更细粒度监控。
- 队列与权限:通过 Capacity Scheduler 的 ACL 控制提交与管理权限;为关键队列设置合理的 maximum-application-lifetime 与 default-application-lifetime,避免长期占用。
- 调度器选择:多用户共享且强调公平时使用 Fair Scheduler;需要严格容量配额与层级队列时使用 Capacity Scheduler;单任务顺序执行可用 FIFO。
以上就是关于“Hadoop作业如何在Ubuntu上调度”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm