Hadoop在Ubuntu上的故障排除有哪些方法
导读:Hadoop 在 Ubuntu 上的故障排除方法 一 快速定位与通用检查 核对基础环境:执行 java -version 确认已安装 Java 8(或集群要求的版本);检查 JAVA_HOME、HADOOP_HOME、PATH 是否导出并...
Hadoop 在 Ubuntu 上的故障排除方法
一 快速定位与通用检查
- 核对基础环境:执行 java -version 确认已安装 Java 8(或集群要求的版本);检查 JAVA_HOME、HADOOP_HOME、PATH 是否导出并在当前会话生效(如 source ~/.bashrc)。
- 查看进程与端口:用 jps 检查 NameNode、DataNode、ResourceManager、NodeManager 是否到位;必要时用 ss -lntp | grep < 端口> 或 lsof -i:< 端口> 验证监听。
- 翻阅日志:第一时间查看 $HADOOP_HOME/logs/ 下对应进程的 .log 与 .out,从异常栈定位配置、权限或网络问题。
- 配置校验:重点核对 core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml 的 fs.defaultFS、dfs.replication、yarn.resourcemanager.hostname 等关键项。
- 防火墙与网络:在 Ubuntu 上放行端口(如 9870/8088/9000/50010/50020/50075/50090),或临时关闭 ufw 验证是否为网络阻断。
- 首次部署或状态异常:执行 hdfs namenode -format 重建元数据(注意会清空 HDFS 数据)。
二 常见故障与修复对照表
| 症状 | 高频原因 | 快速修复 |
|---|---|---|
| 启动报 JAVA_HOME is not set | 未设置或设置路径错误 | 在 hadoop-env.sh 中显式导出 JAVA_HOME,如:export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 |
| 以 root 启动报缺少 *_USER 变量 | Hadoop 3.x 的安全启动限制 | 在 sbin/start-dfs.sh / stop-dfs.sh 顶部加入:HDFS_DATANODE_USER=root;HDFS_DATANODE_SECURE_USER=hdfs;HDFS_NAMENODE_USER=root;HDFS_SECONDARYNAMENODE_USER=root |
| 执行脚本报 pdsh@xxx: localhost: Connection refused | pdsh 默认用 rsh | 在 /etc/profile 加入:export PDSH_RCMD_TYPE=ssh 并 source 使其生效 |
| 浏览器访问 50070 失败 | Hadoop 3.x 端口变更 | 改用 9870(如 http://localhost:9870) |
| DataNode 启动失败或反复退出 | 切换伪分布式/分布式后 tmp/dfs/name/data 不一致 | 清理所有节点的临时目录,重新 hdfs namenode -format 后再启动 |
| HDFS 命令报 No such file or directory | 用户 HDFS 家目录 不存在 | 先执行:hdfs dfs -mkdir -p /user/$USER |
| 命令未找到或 PATH 无效 | 仅当前终端导出 PATH | 在 ~/.bashrc 中追加 PATH 并 source,确保全局可用 |
| 主机名解析错误(如 “Does not contain a valid host:port authority”) | /etc/hosts 或主机名含非法字符(如 _ 或 .) | 使用仅含字母数字与连字符的主机名,并在 /etc/hosts 正确映射 |
| 端口不通或 Live datanodes 为 0 | 防火墙阻断或节点间不通 | 放行相关端口(如 9870/8088/9000/50010/50020/50075/50090),或临时关闭 ufw 验证 |
| 出现 NativeCodeLoader 警告 | 缺少本地库或库路径未设置 | 在 hadoop-env.sh 添加:export HADOOP_COMMON_LIB_NATIVE_DIR=${ HADOOP_PREFIX} /lib/native;export HADOOP_OPTS=“-Djava.library.path=$HADOOP_PREFIX/lib” |
三 配置与版本差异要点
- Hadoop 3.x 与 2.x 的 Web UI 端口不同:NameNode 由 50070 改为 9870;YARN 的 8088 保持不变。
- 启动脚本的用户变量名在 3.x 有调整:将已废弃的 HADOOP_SECURE_DN_USER 替换为 HDFS_DATANODE_SECURE_USER。
- 命令语法更新:Hadoop 3.x 推荐使用 hdfs dfs -mkdir -p … 替代老版本命令格式。
- 主机名规范:避免使用 下划线“_” 或 点号“.”,防止 RPC/地址解析异常。
- 环境变量优先级:脚本内显式导出 JAVA_HOME/HADOOP_HOME 可避免系统级配置遗漏。
四 实用排障脚本与命令清单
- 一键健康检查脚本(示例)
#!/usr/bin/env bash
echo "=== Java &
Hadoop ==="
java -version 2>
&
1
hadoop version 2>
&
1
echo "=== Env ==="
echo "JAVA_HOME=$JAVA_HOME"
echo "HADOOP_HOME=$HADOOP_HOME"
echo "PATH=$PATH"
echo "=== Processes ==="
jps
echo "=== NameNode HTTP ==="
ss -lntp | grep 9870 || echo "9870 not listening"
echo "=== DFS Health ==="
hdfs dfsadmin -report | head -20
echo "=== Recent logs (NameNode) ==="
tail -n50 $HADOOP_HOME/logs/hadoop-*-namenode-*.log | grep -i -E 'error|exception|failed'
- 常用命令速查
- 启动/停止:start-dfs.sh / stop-dfs.sh,start-yarn.sh / stop-yarn.sh
- 进程查看:jps
- 端口检查:ss -lntp | grep < 端口> 或 lsof -i:< 端口>
- 元数据初始化:hdfs namenode -format(仅在首次或数据可丢弃时执行)
- 创建用户目录:hdfs dfs -mkdir -p /user/$USER
- 防火墙放行(Ubuntu):sudo ufw allow 9870,8088,9000,50010,50020,50075,50090/tcp 或 sudo ufw disable(仅测试环境)
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: Hadoop在Ubuntu上的故障排除有哪些方法
本文地址: https://pptw.com/jishu/769589.html
