在 CentOS 上 HDFS 启动不了 的原因很多,下面我按最常见原因 → 排查方法 → 解决办法给你系统梳理一下,你可以对照看是哪一类。
HDFS 起不来,90% 的问题都在日志里
# NameNode 日志
tail -n 200 $HADOOP_HOME/logs/hadoop-*-namenode-*.log
# DataNode 日志
tail -n 200 $HADOOP_HOME/logs/hadoop-*-datanode-*.log
⚠️ 一定要看日志,下面很多情况日志里都有明确报错。
症状
java.io.IOException: NameNode is not formatted
解决
hdfs namenode -format
⚠️ 只在第一次或清空元数据后执行,不要反复格式化!
症状
Error: JAVA_HOME is not set
解决 编辑:
vi $HADOOP_HOME/etc/hadoop/hadoop-env.sh
确保有:
export JAVA_HOME=/usr/java/jdk1.8.0_xxx
查看 Java 路径:
which java
readlink -f $(which java)
症状
Cannot resolve hostname
Connection refused
解决
vi /etc/hosts
示例:
127.0.0.1 localhost
192.168.1.10 master
192.168.1.11 slave1
hostname 必须和 core-site.xml 中一致。
症状
root@slave1: Permission denied (publickey,password)
解决
ssh-keygen -t rsa
ssh-copy-id master
ssh-copy-id slave1
测试:
ssh master
ssh slave1
症状
BindException: Address already in use
解决
netstat -tunlp | grep 9000
或:
ss -lntp | grep java
修改端口(core-site.xml):
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
症状
Connection refused
DataNode 无法连接 NameNode
解决
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
vi /etc/selinux/config
# SELINUX=disabled
症状
Permission denied
Cannot create directory
解决
chown -R hadoop:hadoop /hadoop
chmod -R 755 /hadoop
HDFS 数据目录不要放在 /root 下!
症状
DataNode 启动后就死
Incompatible clusterIDs
解决(简单粗暴)
rm -rf /hadoop/dfs/data/*
再重启 DataNode
start-dfs.sh
jps
应看到:
访问:
http://master:9870
你可以把下面信息发我:
start-dfs.sh 的完整报错core-site.xml + hdfs-site.xml我可以直接告诉你是哪一行配置错了。