温馨提示×

CentOS Hadoop 运行出错怎么办

小樊
34
2025-12-23 17:36:39
栏目: 智能运维

CentOS 上 Hadoop 运行出错的快速排查与修复

一、先定位错误来源

  • 查看进程:执行 jps,确认 NameNode、DataNode、ResourceManager、NodeManager 是否在预期节点出现。
  • 查看日志:到 $HADOOP_HOME/logs/ 目录,优先看对应进程的 .log.out 文件末尾的错误堆栈。
  • 查看 Web UI:
    • HDFS NameNode:Hadoop 3.x 为 9870Hadoop 2.x 为 50070(如 http://:9870)。
    • YARN ResourceManager:8088
  • 检查端口与连通:确认 fs.defaultFS= hdfs://:9000 中的主机名可解析,且 9000/9870/8088 等端口未被占用、可互通。
  • 检查系统环境:确认 JAVA_HOME 已设置、SSH 免密正常、配置文件语法正确(XML 无多余空行/缩进错误)。

二、高频错误与对应修复

  • 以 root 启动报错 “but there is no HDFS_DATANODE_USER defined”
    sbin/start-dfs.sh / sbin/stop-dfs.sh 顶部添加(Hadoop 3.x 示例):
    HDFS_DATANODE_USER=root
    HDFS_DATANODE_SECURE_USER=hdfs
    HDFS_NAMENODE_USER=root
    HDFS_SECONDARYNAMENODE_USER=root
    sbin/start-yarn.sh / sbin/stop-yarn.sh 顶部添加:
    YARN_RESOURCEMANAGER_USER=root
    HADOOP_SECURE_DN_USER=yarn
    YARN_NODEMANAGER_USER=root
    说明:生产环境建议使用 非 root 用户并通过系统服务管理。
  • “hadoop: 未找到命令”
    配置环境变量(/etc/profile 或 ~/.bashrc):
    export HADOOP_HOME=/opt/hadoop
    export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
    执行 source /etc/profile 生效。
  • DataNode 启动后很快消失或反复重启
    常见为多次格式化导致 clusterID 不一致
    1)对比 dfs/name/current/VERSIONdfs/data/current/VERSIONclusterID
    2)将 DataNode 的 clusterID 修改为与 NameNode 一致
    3)清理 $HADOOP_HOME/data、logs 后重新 hdfs namenode -format 并启动。
  • 启动告警 “WARN util.NativeCodeLoader: Unable to load native-hadoop library …”
    多为 OS/JDK/Hadoop 位数不匹配 或本地库路径未设置。
    处理:统一 64 位 环境;在 hadoop-env.sh 中设置:
    export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
    export HADOOP_OPTS=“-Djava.library.path=$HADOOP_HOME/lib:$HADOOP_COMMON_LIB_NATIVE_DIR”
    必要时重新编译 native 库或升级/降级匹配版本。
  • 权限被拒绝(Permission denied)
    将 Hadoop 安装与数据目录授权给运行用户(如 hadoop):
    chown -R hadoop:hadoop /opt/hadoop
    chmod -R 755 /opt/hadoop
    注意 /tmplogs 等目录也需可写。
  • 无法无密 SSH 登录或 “ssh localhost” 仍需密码
    生成密钥并分发:
    ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
    cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
    chmod 644 ~/.ssh/authorized_keys
    确认以 同一用户 启动 Hadoop 与配置 SSH。
  • Live Nodes 为 0 或节点数为 0
    可能原因:
    1)各节点 dfs.datanode.data.dir 配置成相同路径,导致识别为同一 DataNode;
    2)克隆虚拟机后 core-site.xml 仍为 fs.defaultFS=hdfs://localhost:9000,应改为 hdfs://:9000
    3)/etc/hosts 将主机名解析到 127.0.0.1,需改为 真实 IP
    修正后清理数据目录并重新格式化、重启。
  • 配置文件错误(如 “Incorrect configuration: namenode address … not configured” 或 XML 解析错误)
    核对 core-site.xml、hdfs-site.xml 关键参数:
    • fs.defaultFS(如 hdfs://namenode:9000
    • dfs.namenode.name.dir / dfs.datanode.data.dir
    • dfs.replication(单机可设为 1
      同时检查 XML 语法(避免多余空行/标签未闭合),并同步到所有节点。

三、一键自检与修复清单

  • 环境就绪:
    • java -version 正常;echo $JAVA_HOME 与 $HADOOP_HOME 正确;
    • ssh namenodedatanode 各节点免密互通;
    • /etc/hosts 正确映射主机名与 IP
    • 关闭或放行 firewalld/iptables,确保 9000/9870/8088 端口可用。
  • 配置与目录:
    • core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 语法与参数正确;
    • 各节点 dfs.name.dir / dfs.data.dir 目录存在且权限正确;
    • workers(Hadoop 3.x)或 slaves(2.x)列出所有 DataNode 主机名
  • 清理与格式化:
    • 备份后清理 $HADOOP_HOME/data、logs
    • 仅格式化一次:hdfs namenode -format
    • 启动:start-dfs.sh && start-yarn.sh
    • jps9870/8088 验证进程与节点状态。

四、仍未解决时请准备的信息

  • Hadoop 版本与发行版(如 3.3.x/2.10.x/CDH)、操作系统版本(CentOS 7/8/Stream)、JDK 版本与位数;
  • 报错原文(来自 .log/.out 与控制台)、相关配置片段(core-site.xml/hdfs-site.xml 等,注意脱敏)、jps 输出、以及 /etc/hosts 与网络连通性测试结果。

0