一聚教程网:一个值得你收藏的教程网站

最新下载

热门教程

Ubuntu Hadoop 任务调度如何操作

时间:2026-08-06 07:23:02 编辑:袖梨 来源:一聚教程网

Ubuntu 上 Hadoop 任务调度实操指南

Ubuntu Hadoop 任务调度如何操作

一 核心概念与架构

  1. Hadoop 2.x/3.x 将计算与存储解耦:由 YARN 负责资源管理与任务调度,由 MapReduce 作为计算框架在 YARN 上运行。核心角色包括:
    1. ResourceManager:集群唯一,负责全局资源分配与调度。
    2. NodeManager:每个工作节点一个,管理本机资源并运行容器(Container)。
    3. ApplicationMaster(AM):每个作业一个,向 RM 申请资源并与 NM 协作运行任务。
    4. HDFS:提供作业输入/输出与中间数据的持久化存储。
  2. 调度器类型:
    1. FIFO Scheduler:先进先出,简单但不适合多队列与多用户。
    2. Capacity Scheduler:多队列、容量隔离与弹性,适合多团队共享集群。
    3. Fair Scheduler:按权重公平分配,适合多用户按需共享。
  3. 常用端口(便于排障与访问):
    1. 8088:ResourceManager Web UI
    2. 9870:HDFS NameNode Web UI(Hadoop 3.x)
    3. 8032/8030/8031:RM 的 address/scheduler/resource-tracker 服务端口(可选,用于直连或脚本监控)

二 环境准备与最小配置

  1. 前置要求
    1. 操作系统:Ubuntu 18.04/20.04/22.04
    2. Java:OpenJDK 8 或 11(Hadoop 3.x 推荐 8/11;部分环境在 JDK 11+ 需设置模块参数)
    3. Hadoop:3.3.x/3.4.x(二进制包解压部署即可)
  2. 关键配置($HADOOP_HOME/etc/hadoop)
    1. core-site.xml
      1. 指定默认文件系统(示例为本地伪分布):
        1. fs.defaultFShdfs://localhost:9000
    2. hdfs-site.xml
      1. 单机/伪分布可设副本数为 1:
        1. dfs.replication1
    3. mapred-site.xml
      1. 使用 YARN 作为执行框架:
        1. mapreduce.framework.nameyarn
    4. yarn-site.xml
      1. 启用 Shuffle 服务并指定 RM 主机(伪分布用 localhost):
        1. yarn.nodemanager.aux-servicesmapreduce_shuffle
        2. yarn.resourcemanager.hostnamelocalhost
  3. 环境变量(示例)
    1. 在 hadoop-env.sh / yarn-env.sh / mapred-env.sh 中设置 JAVA_HOME(如:/usr/lib/jvm/java-8-openjdk-amd64)
    2. 如使用 JDK 11+ 且启动异常,可在 yarn-env.sh 增加:
      1. export YARN_RESOURCEMANAGER_OPTS=“–add-opens java.base/java.lang=ALL-UNNAMED”
      2. export YARN_NODEMANAGER_OPTS=“–add-opens java.base/java.lang=ALL-UNNAMED”

三 启动集群与提交作业

  1. 启动 HDFS 与 YARN
    1. 格式化 NameNode(首次):hdfs namenode -format
    2. 启动 HDFS:start-dfs.sh
    3. 启动 YARN:start-yarn.sh
    4. 启动 MapReduce 历史服务器(便于查看已完成作业日志):mapred --daemon start historyserver
  2. 提交示例作业(WordCount)
    1. 准备输入数据到 HDFS:
      1. hdfs dfs -mkdir -p /user/$USER/input
      2. hdfs dfs -put $HADOOP_HOME/etc/hadoop/*.xml /user/$USER/input
    2. 提交 MapReduce 作业(示例 JAR 位于 $HADOOP_HOME/share/hadoop/mapreduce/):
      1. hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar wordcount /user/$USER/input /user/$USER/output
  3. 常用运维命令
    1. 查看应用列表:yarn application -list
    2. 查看应用详情:yarn application -status
    3. 终止应用:yarn application -kill
  4. Web 界面
    1. ResourceManager:http://<RM_HOST>:8088
    2. NameNode(Hadoop 3.x):http://<NN_HOST>:9870
    3. 历史服务器:http://<RM_HOST>:19888(若已启动)

四 调度器配置与队列实践

  1. 选择调度器(在 yarn-site.xml 设置)
    1. Capacity Scheduler(多队列、容量隔离,生产常用)
      1. yarn.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
      2. 在 $HADOOP_HOME/etc/hadoop/capacity-scheduler.xml 中定义队列与容量(如:default 队列 capacity=100,或 root 下分 dev/test 各 50)
    2. Fair Scheduler(按权重公平共享)
      1. yarn.scheduler.classorg.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler
      2. 在 $HADOOP_HOME/etc/hadoop/fair-scheduler.xml 中定义队列与权重/最小资源
  2. 提交到指定队列
    1. 命令行:yarn jar your-job.jar YourMainClass -Dmapreduce.job.queuename=dev input output
    2. 或在代码中通过 Configuration 设置:conf.set(“mapreduce.job.queuename”, “dev”)
  3. 队列与权限建议
    1. 为团队划分队列,设置 capacity/minimum-resource/maximum-resource,避免资源争抢
    2. 结合 ACL 控制队列提交与查看权限(capacity-scheduler.xml 中配置)
  4. 验证
    1. 在 8088 页面查看作业详情中的 Queue 字段,确认调度到目标队列
    2. 观察各队列的 Apps Running/Resources Used 是否符合预期

五 常见问题与排查

  1. 无法访问 8088/9870
    1. 检查对应进程是否在(jps 查看 ResourceManager/NameNode)
    2. 核对 yarn-site.xml / core-site.xml 中主机名与端口(伪分布用 localhost 或 127.0.0.1)
    3. 开放防火墙端口(如 ufw/iptables),或在本机测试
  2. 启动 YARN 后 ResourceManager/NM 未起来
    1. 查看 $HADOOP_HOME/logs/ 下对应日志(resourcemanager.log / nodemanager.log)
    2. 常见原因:JDK 版本不兼容(切换到 JDK 8)、JAVA_HOME 配置错误、端口被占用、主机名解析问题
  3. 作业卡在 ACCEPTED
    1. 常见原因:队列无可用资源、集群资源不足、AM 申请容器失败
    2. 排查:yarn application -status 、查看日志、核对队列容量与用户配额
  4. 历史任务日志不可见
    1. 确认已启动历史服务器:mapred --daemon start historyserver
    2. 访问 19888 并检查作业是否写入日志聚合(yarn.log-aggregation-enable 为 true 时)

热门栏目