在 CentOS 上配置 HDFS(Hadoop 分布式文件系统)失败 是比较常见的问题,一般不是单一原因。下面我按最常见失败场景 → 排查思路 → 解决方案给你一个系统性的排查指南。你对照着一步一步来就好。
HDFS 强依赖 Java。
java -version
✅ 正常示例:
java version "1.8.0_xxx"
❌ 如果没有:
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
并配置 JAVA_HOME:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
建议写入:
vi ~/.bashrc
ssh localhost
✅ 能直接登录
❌ 不行就配置:
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
NameNode 启动失败(最常见)starting namenode...
namenode not started
cat $HADOOP_HOME/logs/hadoop-*-namenode-*.log
常见错误包括:
⚠️ 不要反复格式化
hdfs namenode -format
如果已经格式化过,先停止服务:
stop-dfs.sh
删除旧数据目录(配置文件中指定的):
rm -rf /tmp/hadoop-* /data/hadoop/dfs/*
再重新格式化。
Hadoop 默认使用当前用户,目录必须可写。
sudo chown -R $(whoami):$(whoami) /data/hadoop
或你配置的路径:
mkdir -p /data/hadoop/dfs/name
mkdir -p /data/hadoop/dfs/data
cat $HADOOP_HOME/logs/hadoop-*-datanode-*.log
重新格式化 NameNode(清空数据)
手动修改 clusterID:
vi /data/hadoop/dfs/name/current/VERSION
vi /data/hadoop/dfs/data/current/VERSION
确保 clusterID 一致。
netstat -tunlp | grep 9000
netstat -tunlp | grep 50070
core-site.xml<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vi /etc/selinux/config
SELINUX=disabled
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/dfs/data</value>
</property>
</configuration>
echo $JAVA_HOME
ssh localhost
java -version
hdfs namenode -format
start-dfs.sh
jps
jps 正常应看到:
NameNode
DataNode
SecondaryNameNode
你可以直接把 报错信息贴出来,例如:
logs/hadoop-*-namenode-*.logjps 输出我可以精确告诉你是哪一步出错,并给你最小修改方案 ✅
也可以指导你 从零在 CentOS 7/8 搭一套可用的 HDFS。