CentOS 上 HDFS 启动失败 的原因很多,通常和 配置、权限、Java 环境、端口冲突、磁盘/目录问题 有关。下面我按“最常见原因 → 排查思路 → 常用命令”给你一个系统性的排查清单。
HDFS 强依赖 Java。
检查:
java -version
echo $JAVA_HOME
典型问题:
解决:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
在 hadoop-env.sh 中明确指定:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
如果你是第一次启动 HDFS,但没有格式化 NameNode。
报错常见形式:
NameNode is not formatted
解决:
hdfs namenode -format
⚠️ 注意:
常见错误:
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<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>
常见错误:
Hadoop 目录必须是 启动用户可写
检查:
ls -ld /data/hadoop/namenode
ls -ld /data/hadoop/datanode
修复:
sudo chown -R hadoop:hadoop /data/hadoop
chmod -R 755 /data/hadoop
CentOS 默认防火墙和 SELinux 会拦截 HDFS 通信。
systemctl status firewalld
systemctl stop firewalld
systemctl disable firewalld
getenforce
如果是 Enforcing:
sudo setenforce 0
永久关闭:
vi /etc/selinux/config
SELINUX=disabled
Hadoop 脚本依赖 SSH。
检查:
ssh localhost
配置免密:
ssh-keygen -t rsa
ssh-copy-id localhost
netstat -tunlp | grep 9000
解决:
df -h
HDFS 对磁盘空间非常敏感。
日志目录一般在:
$HADOOP_HOME/logs/
重点看:
hadoop-*-namenode-*.loghadoop-*-datanode-*.log搜索错误:
grep -i error hadoop-*-namenode-*.log
# 1. 格式化
hdfs namenode -format
# 2. 启动
start-dfs.sh
# 3. 检查
jps
jps 正常应看到:
你可以直接把以下内容发我,我可以一步一步帮你定位:
core-site.xml + hdfs-site.xmljps 的输出我可以直接帮你判断是 配置问题、权限问题还是环境问题 ✅