在 CentOS 上调试 HDFS(Hadoop Distributed File System),通常可以从 日志、配置、进程、网络、权限、JVM 等多个层面入手。下面给你一套实战型调试思路,从“能跑起来”到“定位问题”。
hadoop version
确认:
jps
正常应看到:
NameNodeDataNodeSecondaryNameNode(或 StandbyNameNode)❌ 如果缺失:
日志位置(默认):
$HADOOP_HOME/logs/
重点文件:
hadoop-*-namenode-*.log
hadoop-*-datanode-*.log
查看错误:
tail -n 200 hadoop-root-namenode-localhost.log
常见错误关键词:
ERRORExceptionPermission deniedIncompatible clusterIDsCannot create directory✅ 90% 的 HDFS 问题都在日志里
hdfs dfsadmin -report
正常输出:
❌ 若报错:
core-site.xml<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
hdfs-site.xml<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/datanode</value>
</property>
检查:
ls -ld /data/hadoop/namenode
修复:
sudo chown -R hadoop:hadoop /data/hadoop
chmod -R 755 /data/hadoop
⚠️ 不要直接用 root 启动 Hadoop
⚠️ 会清空 HDFS 数据
hdfs namenode -format
适用场景:
hdfs dfs -ls /
hdfs dfs -mkdir /test
hdfs dfs -put file.txt /test
hdfs dfs -cat /test/file.txt
失败常见原因:
查看:
hdfs dfsadmin -safemode get
强制退出(不推荐):
hdfs dfsadmin -safemode leave
systemctl stop firewalld
systemctl disable firewalld
netstat -tunlp | grep 9000
netstat -tunlp | grep 50070
在 hadoop-env.sh 中:
export HADOOP_NAMENODE_OPTS="-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005"
然后用 IDEA / Eclipse 远程 debug。
| 问题 | 原因 |
|---|---|
| DataNode 启动后消失 | clusterID 不一致 |
| Permission denied | 目录权限 |
| Cannot create directory | dfs.dir 不存在 |
| 连接拒绝 | NameNode 未启动 |
| Safe mode | 块未达标 |
jpshadoop-*-loghdfs dfsadmin -report如果你愿意,可以告诉我:
我可以直接帮你 定位具体错误 + 给出可执行的修复命令。