温馨提示×

Ubuntu Hadoop 任务调度如何操作

小樊
41
2025-12-22 17:30:44
栏目: 智能运维

Ubuntu 上 Hadoop 任务调度实操指南

一 核心概念与架构

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

二 环境准备与最小配置

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

三 启动集群与提交作业

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

四 调度器配置与队列实践

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

五 常见问题与排查

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

0