在 Linux 上配置 HDFS(Hadoop Distributed File System) 时,既有 通用 Hadoop 注意事项,也有 Linux 系统层面的特殊要求。下面按“常见坑 + 关键配置”来总结,适合生产或学习环境参考。
useradd hadoop
passwd hadoop
hadoop 用户启动 HDFSHDFS 强烈依赖主机名解析
hostnamectl set-hostname node1
/etc/hosts(每台机器都要一致):
192.168.1.10 node1
192.168.1.11 node2
192.168.1.12 node3
❌ 不建议只配 127.0.0.1
✅ 使用 静态 IP + 主机名
HDFS 启动依赖 SSH
su - hadoop
ssh-keygen -t rsa
ssh-copy-id node1
ssh-copy-id node2
ssh-copy-id node3
✅ 测试:
ssh node2
无需输入密码
❌ 不建议 JDK 17+(兼容性差)
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk
并在:
hadoop-env.sh/etc/profile~/.bashrc都配置
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
</configuration>
⚠️ NameNode 地址必须一致
<configuration>
<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>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
⚠️ 注意:
/tmpnode1
node2
node3
旧版本叫 slaves
HDFS 对文件句柄要求极高
ulimit -n
建议:
* soft nofile 65536
* hard nofile 65536
写入 /etc/security/limits.conf
swapoff -a
并在 /etc/fstab 注释 swap
systemctl stop firewalld
systemctl disable firewalld
setenforce 0
❌ 否则 DataNode 可能无法通信
chown -R hadoop:hadoop /data/hadoop
chmod -R 755 /data/hadoop
hdfs namenode -format
⚠️ 不要反复执行,否则 data 丢失
| 问题 | 原因 |
|---|---|
| NameNode 起不来 | JAVA_HOME 错 / 端口占用 |
| DataNode 不显示 | 多次 format / clusterID 不一致 |
| 集群慢 | swap 没关 |
| SSH 失败 | 用户不一致 |
| 连接拒绝 | 防火墙 / hosts 错 |
✅ 专用用户
✅ 静态 IP + 主机名
✅ SSH 免密
✅ JAVA_HOME
✅ 关闭防火墙 / SELinux
✅ 文件句柄调大
✅ 禁用 swap
✅ 正确目录权限
✅ 只格式化一次
如果你愿意,我可以:
只要告诉我你的 Hadoop 版本 + Linux 发行版 即可。