CentOS 上 HDFS 无法启动 是很常见的问题,通常不是“CentOS 本身”的问题,而是 环境配置、权限、Java、防火墙或配置错误 导致的。下面我按最常见原因 → 排查方法 → 解决办法给你系统梳理一下。
HDFS 严重依赖 Java。
检查:
java -version
echo $JAVA_HOME
问题表现:
start-dfs.sh 没反应JAVA_HOME is not set解决:
export JAVA_HOME=/usr/java/jdk1.8.0_xxx
并确保:
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
里面有:
export JAVA_HOME=/usr/java/jdk1.8.0_xxx
HDFS 启动依赖 SSH。
检查:
ssh localhost
如果还要输入密码,就会失败。
解决:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
CentOS 默认防火墙很严格。
检查:
systemctl status firewalld
getenforce
解决(测试环境):
systemctl stop firewalld
setenforce 0
生产环境应开放端口而不是关闭。
第一次启动 HDFS 必须格式化 NameNode。
错误表现:
NameNode is not formatted解决:
hdfs namenode -format
⚠️ 注意:不要重复格式化,否则 DataNode 无法注册。
HDFS 数据目录必须属于运行用户。
常见错误:
Permission denied
解决:
chown -R hadoop:hadoop /data/hadoop
重点检查:
core-site.xml
hdfs-site.xml
常见错误:
fs.defaultFS 写错dfs.namenode.name.dir 路径不存在示例:
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
CentOS 可能已有服务占用 9000 / 50070。
netstat -tunlp | grep 9000
# 1. Java
java -version
# 2. SSH
ssh localhost
# 3. 防火墙
systemctl stop firewalld
# 4. 格式化(仅第一次)
hdfs namenode -format
# 5. 启动
start-dfs.sh
# 6. 看日志
tail -100 $HADOOP_HOME/logs/hadoop-*-namenode-*.log
你可以把下面信息发我,我直接告诉你具体原因:
cat /etc/redhat-release)logs/ 里的关键错误日志我可以一步一步帮你修到能跑 ✅