Debian 上搭建 HDFS 集群的关键注意事项
一 规划与版本
- 明确节点角色与规模:至少部署 1 台 NameNode、多台 DataNode;若使用 YARN,另配 1 台 ResourceManager 与若干 NodeManager。
- 硬件基线建议:每节点 ≥4 核 CPU(推荐 ≥8 核)、≥16GB 内存(推荐 ≥32GB);NameNode 用 SSD(≥500GB),DataNode 每节点 ≥2TB;网络 千兆起,推荐万兆。
- Java 与版本:Hadoop 3.x 通常搭配 Java 8;在所有节点统一安装并验证版本一致性。
- 目录与一致性:各节点 Hadoop 安装路径、数据目录结构保持一致,便于分发与维护。
- 主机名规范:使用稳定可解析的主机名(如 namenode、datanode1…),避免依赖易变因素。
二 系统与网络
- 主机名解析:在所有节点的 /etc/hosts 中写入所有节点的 IP-主机名 映射,确保双向可解析;必要时在 NameNode 上避免使用 127.0.1.1 指向本机名,防止 fs.defaultFS 连接异常。
- 端口可达:确认 9000(HDFS RPC)、9870(NameNode Web UI)、9864/9866(DataNode) 等端口在防火墙与安全组中放行。
- SSH 免密:在 NameNode 生成密钥,将公钥分发到所有 DataNode(以及自身),以便脚本统一启停。
- 基础环境:Debian 11 默认无 SELinux,如启用需关闭;按需配置防火墙策略(UFW/iptables)以放通上述端口。
三 配置关键点
- 环境变量:在 hadoop-env.sh 明确设置 JAVA_HOME 与 HADOOP_HOME;在所有节点统一 PATH。
- 核心配置:
- core-site.xml:设置 fs.defaultFS=hdfs://namenode:9000。
- hdfs-site.xml:设置 dfs.replication(通常 3)、dfs.namenode.name.dir(NameNode 元数据目录)、dfs.datanode.data.dir(DataNode 数据目录)。
- 进程清单:编辑 workers(或旧版 slaves)文件,逐行列出所有 DataNode 主机名。
- 目录准备:提前创建并赋权 name 与 data 目录,避免首次启动因目录缺失异常。
- 初始化:仅在 全新集群 的 NameNode 上执行一次 hdfs namenode -format,避免重复格式化导致 clusterID 不一致。
四 启动与安全
- 启动顺序:在 NameNode 上先启动 HDFS(如 start-dfs.sh),如需 YARN 再启动 start-yarn.sh。
- 健康检查:
- 命令行:用 jps 确认 NameNode/DataNode(及 ResourceManager/NodeManager)进程存在。
- Web UI:访问 http://namenode:9870 查看 Live Nodes、Block Pool 等是否正常。
- 权限与容错:HDFS 默认以用户身份运行,若测试环境遇到权限问题可临时放宽(如 hdfs dfs -chmod 777 /),生产环境应按需设置 用户/组 与 ACL。
- 数据可靠性:副本数在 hdfs-site.xml 的 dfs.replication 中设置,仅对“新增数据”生效;存量数据用 hdfs dfs -setrep -w 3 /path 调整并等待完成。
五 常见坑与扩展
- 复制既有磁盘到新 DataNode 会导致 DataNode UUID 冲突,从而无法注册;新增节点应使用全新数据目录或清理旧元数据后再加入。
- 未配置 hadoop.tmp.dir 时,系统默认 /tmp/hadoop-${user} 可能在重启后被清理,引发异常;建议显式配置并创建目录。
- 扩容时禁止“整机克隆”旧 DataNode 的磁盘;按规范准备新节点并加入 workers。
- 监控与容量规划:结合 NameNode/DataNode Web UI 与操作系统监控,关注 磁盘使用率、心跳延迟、副本缺失 等指标,并按需横向扩容 DataNode。