CentOS 上 Hadoop 运行出错的快速排查与修复
一、先定位错误来源
- 查看进程:执行 jps,确认 NameNode、DataNode、ResourceManager、NodeManager 是否在预期节点出现。
- 查看日志:到 $HADOOP_HOME/logs/ 目录,优先看对应进程的 .log 与 .out 文件末尾的错误堆栈。
- 查看 Web UI:
- HDFS NameNode:Hadoop 3.x 为 9870,Hadoop 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/VERSION 与 dfs/data/current/VERSION 的 clusterID;
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
注意 /tmp、logs 等目录也需可写。
- 无法无密 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 namenode 与 datanode 各节点免密互通;
- /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;
- 用 jps 与 9870/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 与网络连通性测试结果。