CentOS 启动不了 HDFS(Hadoop Distributed File System)原因很多,常见坑几乎都集中在环境、配置、权限、端口、Java这几块。下面按“最常见 → 不太常见”帮你系统排查。
HDFS 强依赖 Java。
检查:
echo $JAVA_HOME
java -version
JAVA_HOME 必须在:
/etc/profilehadoop-env.sh 里显式指定例如:
export JAVA_HOME=/usr/java/jdk1.8.0_361
✅ 修改后:
source /etc/profile
第一次启动 HDFS 必须格式化
hdfs namenode -format
⚠️ 注意:
CentOS 7+ 默认 firewalld 开着,HDFS 端口不通。
临时关闭:
systemctl stop firewalld
永久关闭:
systemctl disable firewalld
或开放端口(不推荐新手):
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
CentOS 默认 SELinux 开启。
查看:
getenforce
如果是 Enforcing,建议改成:
setenforce 0
永久关闭:
vi /etc/selinux/config
SELINUX=disabled
常见错误:
<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>
⚠️ 目录必须:
HDFS 不能用 root 启动(除非你硬改)。
正确做法:
useradd hadoop
chown -R hadoop:hadoop /data/hadoop
chown -R hadoop:hadoop $HADOOP_HOME
启动:
su - hadoop
start-dfs.sh
报错类似:
Cannot run as root
解决:
hadoop-env.shexport HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
netstat -tunlp | grep 9000
常见冲突:
看日志!
cd $HADOOP_HOME/logs
tail -100 hadoop-*-namenode-*.log
tail -100 hadoop-*-datanode-*.log
你可以用这个 checklist:
如果你愿意,把下面内容发我:
core-site.xml / hdfs-site.xml我可以直接告诉你是哪一行配置出错。