在 Linux 上排查 HDFS(Hadoop 分布式文件系统)配置错误,一般可以按「由浅入深、由日志到配置」的思路来。下面给你一套实用排查流程。
HDFS 依赖 JDK:
java -version
echo $JAVA_HOME
✅ 要求:
JAVA_HOME 已正确配置(在 hadoop-env.sh 中也要写)hadoop version
如果命令不存在,说明:
HDFS 关键配置文件在:
$HADOOP_HOME/etc/hadoop/
hadoop-env.shexport JAVA_HOME=/usr/java/jdk1.8.0_xxx
core-site.xml常见错误:
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
❌ 错误示例:
✅ 建议:
hostname
cat /etc/hosts
确保 hostname 能解析
hdfs-site.xml常见错误:
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/data</value>
</property>
❌ 问题:
✅ 检查:
ls -ld /data/hadoop/name
df -h
⚠️ 不要反复格式化(会丢数据)
hdfs namenode -format
如果格式化失败,看报错信息(90% 是路径/权限问题)
start-dfs.sh
jps
应看到:
❌ 如果某个进程没起来 → 直接看日志
日志目录:
$HADOOP_HOME/logs/
重点文件:
tail -n 200 hadoop-*-namenode-*.log
tail -n 200 hadoop-*-datanode-*.log
BindException → 端口被占用Permission denied → 权限问题Directory does not exist → 路径错Connection refused → 主机/防火墙Incompatible cluster IDs → 格式化不一致systemctl stop firewalld
# 或
iptables -F
ping namenode
ping datanode
ssh localhost date
失败说明:
ssh-keygen
ssh-copy-id localhost
hdfs dfs -ls /
hdfs dfs -mkdir /test
hdfs dfs -put file.txt /test
如果报错,错误信息通常非常直接。
| 问题 | 原因 |
|---|---|
| DataNode 起不来 | 多次格式化 NameNode |
| 端口冲突 | 9000 / 50070 被占用 |
| 权限错误 | 用 root 启动 Hadoop |
| 主机名解析失败 | /etc/hosts 没配 |
| 磁盘满 | df -h 检查 |
✅ 建议统一用普通用户运行 Hadoop
你可以直接贴:
core-site.xml / hdfs-site.xml我可以帮你逐行定位问题。