CentOS 上 HDFS 无法启动 的原因有很多,通常不是“系统本身”的问题,而是环境、配置或权限导致的。下面我按最常见原因 → 排查方法给你梳理一下。
HDFS 强依赖 JDK
检查:
java -version
echo $JAVA_HOME
✅ 正确示例:
java version "1.8.0_xxx"
JAVA_HOME=/usr/java/jdk1.8.0_xxx
❌ 常见问题:
解决:
vi ~/.bashrc
export JAVA_HOME=/usr/java/jdk1.8.0_xxx
export PATH=$JAVA_HOME/bin:$PATH
source ~/.bashrc
systemctl status firewalld
关闭(测试用):
systemctl stop firewalld
systemctl disable firewalld
getenforce
如果是 Enforcing:
setenforce 0
永久关闭:
vi /etc/selinux/config
SELINUX=disabled
第一次启动前必须格式化:
hdfs namenode -format
⚠️ 只能格式化一次,重复格式化会导致 DataNode 无法启动
重点检查:
$HADOOP_HOME/etc/hadoop/
常见错误配置:
core-site.xmlhdfs-site.xml示例(必须有):
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/hdfs/datanode</value>
</property>
HDFS 数据目录不能用 root 随便建
chown -R hadoop:hadoop /data/hadoop
chmod -R 755 /data/hadoop
如果你是用 root 启动 Hadoop,会直接失败。
✅ 建议:
useradd hadoop
su - hadoop
ssh localhost
不行就配置:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
netstat -tunlp | grep 9000
netstat -tunlp | grep 50070
cd $HADOOP_HOME/logs
tail -100 hadoop-*-namenode-*.log
tail -100 hadoop-*-datanode-*.log
错误通常写得非常清楚。
你可以直接贴:
我可以直接告诉你具体是哪一行配置错了。