HDFS在CentOS上的故障排除手册
一、快速定位流程
java -version、echo $JAVA_HOME、echo $HADOOP_HOME。top/htop、df -h,避免因 磁盘空间不足 导致异常。start-dfs.sh、stop-dfs.sh;systemctl status hadoop-hdfs-namenode、systemctl status hadoop-hdfs-datanode(若使用 RPM/ Ambari 管理,服务名可能不同)。core-site.xml 的 fs.defaultFS;hdfs-site.xml 的 dfs.namenode.name.dir、dfs.datanode.data.dir、dfs.replication、dfs.namenode.http-address。ping、telnet <namenode_ip> 8020 测试。hdfs dfsadmin -report、hdfs dfsadmin -printTopology、hdfs dfs -ls /、hdfs fsck /。二、常见故障与修复对照表
| 症状 | 快速检查 | 修复建议 |
|---|---|---|
| NameNode 启动失败,报 IncorrectVersionException | 查看 NameNode 日志;检查 dfs.namenode.name.dir 目录 | 确认版本一致;必要时备份后清理该目录的 VERSION 文件并重新 hdfs namenode -format(会清空元数据) |
| DataNode 未注册或反复掉线 | hdfs dfsadmin -report 看不到节点;查看 DataNode 日志 |
核对 fs.defaultFS 与 dfs.datanode.data.dir;检查网络/防火墙;确保 /etc/hosts 与主机名一致 |
| 客户端报 Connection refused 或无法访问 50070 | telnet <namenode_ip> 8020/50070 失败 |
开放端口(如 8020/9000/50070);排查防火墙/安全组;确认服务已启动 |
| 安全模式导致写入失败 | hdfs dfsadmin -safemode get 显示 ON |
数据充足后自动退出;紧急可用 hdfs dfsadmin -safemode leave(不建议生产频繁使用) |
| Permission denied | 本地与 HDFS 权限;执行用户 | 使用 hdfs dfs -chmod / -chown 调整;或以具备权限的用户执行 |
| DiskSpaceQuotaExceededException | df -h 与 HDFS 配额 |
清理空间;按需调整配额 hdfs dfsadmin -setQuota |
| 配置文件错误(XML 语法、路径不存在) | 启动日志提示 XML/IO 异常 | 校验 core-site.xml、hdfs-site.xml 语法与目录权限;确保路径存在且可写 |
| 版本/环境变量问题 | java -version、$JAVA_HOME 为空或错误 |
在 hadoop-env.sh 与 /etc/profile 正确设置 JAVA_HOME 与 HADOOP_HOME 并 source 生效 |
三、关键配置与端口清单
core-site.xml:fs.defaultFS(如 hdfs://namenode:8020)。firewall-cmd --add-port=8020/tcp --permanentfirewall-cmd --add-port=50070/tcp --permanentfirewall-cmd --reload192.168.1.182 hadoop-namenode、192.168.1.186 hadoop-datanode1。四、应急与恢复操作
hdfs dfsadmin -safemode gethdfs dfsadmin -safemode leave(仅在确认数据完整时使用)。hdfs fsck /fsck 报告执行修复或调整 dfs.replication 后由系统自动补齐。hdfs namenode -format(会清空 HDFS 上所有数据,务必先备份)。scp/rsync);必要时重新分发并重启服务。五、最小化验证命令清单
systemctl status hadoop-hdfs-namenode、systemctl status hadoop-hdfs-datanodejps(应看到 NameNode、DataNode 进程)telnet <namenode_ip> 8020、telnet <namenode_ip> 50070hdfs dfsadmin -reporthdfs dfsadmin -printTopologyhdfs dfs -ls /、hdfs dfs -mkdir -p /test、hdfs dfs -put localfile /test/、hdfs dfs -cat /test/localfilehdfs fsck /