Linux 上 HDFS 配置失败的原因非常多,通常不是单一问题。下面按最常见原因 → 排查思路给你系统梳理一下,你可以对照看是哪一类。
HDFS 严重依赖主机名解析。
典型症状
NameNode 起不来UnknownHostException
Cannot resolve hostname
检查
hostname
cat /etc/hosts
正确示例(单节点)
127.0.0.1 localhost
192.168.1.10 hadoop01
确保:
fs.defaultFS 里的主机名/etc/hosts 里的主机名hostnameHDFS 启动脚本依赖 SSH。
症状
start-dfs.sh
# 卡住或提示输入密码
解决
ssh-keygen -t rsa
ssh-copy-id localhost
ssh localhost # 必须免密成功
Hadoop 对 Java 非常敏感。
检查
echo $JAVA_HOME
java -version
hadoop-env.sh 中必须显式写
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
⚠️ 不要只靠系统环境变量
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/data/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/data/data</value>
</property>
❌ 常见错误:
必须做一次(且只能一次)
hdfs namenode -format
⚠️ 重复格式化会导致:
HDFS 数据目录必须是运行用户可写
sudo chown -R hadoop:hadoop /opt/hadoop
否则报错:
Permission denied
官方不建议 root 启动 HDFS
✅ 建议:
hadoop 用户systemctl stop firewalld
systemctl disable firewalld
或开放端口:
hostname
cat /etc/hosts
echo $JAVA_HOME
ssh localhost
hdfs namenode -format
start-dfs.sh
jps
正常应看到:
NameNode
DataNode
SecondaryNameNode
你可以直接贴:
hadoop logs/)core-site.xml / hdfs-site.xml我可以一步一步帮你排到能跑起来。