在 CentOS 上运行 HDFS 报错的原因非常多,需要先看具体报错信息。下面我按常见原因分类 + 排查方法给你一个系统性的说明,你可以对照自己的情况。
HDFS 依赖 Java,CentOS 默认可能是 OpenJDK 或没装 JDK。
检查:
java -version
echo $JAVA_HOME
问题表现:
command not foundUnsupported major.minor version解决:
yum install -y java-1.8.0-openjdk-devel
并在 hadoop-env.sh 中设置:
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
HDFS 启动依赖 SSH。
报错示例:
Permission denied (publickey,password)
解决:
ssh-keygen -t rsa
ssh-copy-id localhost
CentOS 默认开启防火墙和 SELinux,会导致 DataNode 连不上 NameNode。
检查:
systemctl status firewalld
getenforce
解决(测试环境):
systemctl stop firewalld
setenforce 0
或开放端口:
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
HDFS 对 hostname 非常敏感。
检查:
hostname
cat /etc/hosts
错误示例:
localhost 和真实 hostname 混用127.0.0.1正确示例:
192.168.1.10 master
192.168.1.11 slave1
core-site.xml:
<value>hdfs://master:9000</value>
CentOS 对权限很严格。
报错示例:
Permission denied
Cannot create directory
解决:
chown -R hadoop:hadoop /data/hadoop
chmod -R 755 /data/hadoop
第一次启动必须格式化:
hdfs namenode -format
否则报错:
NameNode is not formatted
⚠️ 不要重复格式化已有集群
CentOS 可能其他服务占用 9000 / 50070。
检查:
netstat -tunlp | grep 9000
请把以下信息发给我,我可以精准判断:
core-site.xmlhdfs-site.xmlcat /etc/redhat-release
❌ 报错:
java.net.BindException: Port in use: 0.0.0.0:9000
✅ 原因:端口被占 / 多次启动
✅ 解决:
jps
kill -9 <pid>
如果你愿意,可以直接把报错截图或日志贴出来(尤其是 logs/ 下的 namenode 或 datanode 日志),我可以一步一步帮你排。