Hadoop作业如何在Ubuntu上调度
导读:在 Ubuntu 上调度 Hadoop 作业的实用方案 一、调度层次与适用场景 系统级定时:使用 Cron 或 systemd timer 在 Ubuntu 上定时触发脚本,脚本内部用命令行提交 Hadoop 作业。优点是简单通用;缺点是...
在 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.capacity< /name> < value> 60< /value> < /property> < property> < name> yarn.scheduler.capacity.root.hive.user-limit-factor< /name> < value> 1< /value> < /property> < property> < name> yarn.scheduler.capacity.root.hive.maximum-capacity< /name> < value> 80< /value> < /property> < property> < name> yarn.scheduler.capacity.root.hive.state< /name> < value> RUNNING< /value> < /property> < property> < name> yarn.scheduler.capacity.root.hive.acl_submit_applications< /name> < value> *< /value> < /property> < property> < name> yarn.scheduler.capacity.root.hive.acl_administer_queue< /name> < 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.class< /name> < value> org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler< /value> < /property> < property> < name> yarn.scheduler.fair.allocation.file< /name> < value> /etc/hadoop/fair-scheduler.xml< /value> < /property>
四、监控与运维要点
- 作业与资源监控:使用 YARN ResourceManager Web UI(默认 8088 端口)查看应用状态、日志与资源使用;必要时结合 Ganglia、Ambari 或 Cloudera Manager 做更细粒度监控。
- 队列与权限:通过 Capacity Scheduler 的 ACL 控制提交与管理权限;为关键队列设置合理的 maximum-application-lifetime 与 default-application-lifetime,避免长期占用。
- 调度器选择:多用户共享且强调公平时使用 Fair Scheduler;需要严格容量配额与层级队列时使用 Capacity Scheduler;单任务顺序执行可用 FIFO。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop作业如何在Ubuntu上调度
本文地址: https://pptw.com/jishu/755449.html
