“Linux 下 HDFS 配置报错”是一个非常宽泛的问题,因为不同阶段的报错原因差异很大。
我先把最常见的 HDFS 配置报错类型和排查方法给你列出来,你可以对照看是哪一类,也可以把具体报错信息贴出来,我帮你精确定位。
现象
localhost: Permission denied (publickey,password)
原因
解决
ssh-keygen -t rsa
ssh-copy-id localhost
# 或
ssh-copy-id 用户名@主机名
现象
Error: JAVA_HOME is not set and could not be found
解决 在:
/etc/profile
或
$HADOOP_HOME/etc/hadoop/hadoop-env.sh
中添加:
export JAVA_HOME=/usr/java/jdk1.8.0_xxx
然后:
source /etc/profile
常见错误
fs.defaultFS 写错namenode 路径不存在✅ 示例正确配置(单机伪分布式):
core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/hadoop/data/datanode</value>
</property>
</configuration>
⚠️ 目录必须存在且有权限:
mkdir -p /opt/hadoop/data/namenode
mkdir -p /opt/hadoop/data/datanode
现象
NameNode is not formatted
解决
hdfs namenode -format
⚠️ 只在第一次启动前执行一次!
现象
Connection refused
解决
systemctl stop firewalld
systemctl disable firewalld
或开放端口:
firewall-cmd --add-port=9000/tcp --permanent
firewall-cmd --reload
现象
UnknownHostException
解决
vi /etc/hosts
示例:
127.0.0.1 localhost
192.168.1.10 master
并确认:
hostname
和配置中的一致。
cat $HADOOP_HOME/logs/hadoop-*-namenode-*.log
echo $JAVA_HOME
echo $HADOOP_HOME
which hdfs
start-dfs.sh
jps
请把以下信息发我,我可以直接帮你改配置:
例如:
CentOS 7 + Hadoop 3.3.6
启动 start-dfs.sh 报 Permission denied
我可以一步一步带你配通 ✅