在 Ubuntu 上搭建 HDFS 完全分布式集群
一 环境准备
- 节点规划:至少准备 1 个 NameNode + 2 个 DataNode(生产建议 3 副本)。示例主机名与 IP:
- master 192.168.200.100
- slave1 192.168.200.101
- slave2 192.168.200.102
- 基础配置:所有节点安装 OpenJDK 8,配置 静态 IP 与 主机名映射 /etc/hosts,确保节点间 SSH 免密登录(包括本机自连),并建议 时间同步(如 ntpdate)。如使用云服务器,请开放相关端口或临时关闭防火墙以便联调。
二 安装与配置 Hadoop
- 安装 Hadoop(所有节点一致):
- 下载并解压(示例版本 3.3.6):
- wget https://downloads.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
- sudo tar -xzvf hadoop-3.3.6.tar.gz -C /usr/local/
- 环境变量(~/.bashrc 或 /etc/profile.d/hadoop.sh):
- export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
- export HADOOP_HOME=/usr/local/hadoop-3.3.6
- export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
- 执行:source ~/.bashrc
- 关键配置($HADOOP_HOME/etc/hadoop/):
- hadoop-env.sh:设置 JAVA_HOME
- core-site.xml:
- fs.defaultFShdfs://master:9000
- hdfs-site.xml:
- dfs.replication3
- dfs.namenode.name.dir/usr/local/hadoop-3.3.6/data/namenode
- dfs.datanode.data.dir/usr/local/hadoop-3.3.6/data/datanode
- mapred-site.xml(可选,若需 MapReduce/ YARN):
- mapreduce.framework.nameyarn
- yarn-site.xml(可选,若需 YARN):
- yarn.resourcemanager.hostnamemaster
- yarn.nodemanager.aux-servicesmapreduce_shuffle
- workers(或旧版 slaves):写入所有 DataNode 主机名(每行一个,如 slave1、slave2)。
三 目录与初始化
- 创建本地数据目录(所有节点):
- sudo mkdir -p /usr/local/hadoop-3.3.6/data/namenode
- sudo mkdir -p /usr/local/hadoop-3.3.6/data/datanode
- 建议将目录属主设为运行 Hadoop 的用户(如 ubuntu 或 hadoop):sudo chown -R ubuntu:ubuntu /usr/local/hadoop-3.3.6/data
- 仅在 NameNode 上执行格式化:
- 分发配置到各 DataNode(保持各节点配置一致,仅 workers 文件不同)。
四 启动与验证
- 启动集群:
- 在 master 上启动 HDFS:start-dfs.sh
- 如需 YARN,在 master 上启动:start-yarn.sh
- 基本验证:
- 进程检查:jps(应见到 NameNode/DataNode/ResourceManager/NodeManager/SecondaryNameNode 等)
- HDFS 状态:hdfs dfsadmin -report
- Web 界面:
- NameNode:http://master:50070
- ResourceManager:http://master:8088
- 常用启停:
- 停止 HDFS:stop-dfs.sh
- 停止 YARN:stop-yarn.sh。
五 常见问题与扩展
- 常见问题
- 配置不一致:核对 core-site.xml/hdfs-site.xml/workers 在所有节点是否一致。
- SSH 免密失败:确认 ~/.ssh/authorized_keys 包含各节点公钥,且本机也能 ssh 自连。
- 防火墙/安全组:开放 9000(HDFS RPC)、50070(NN Web)、8088(RM Web)等端口,或测试阶段临时关闭防火墙。
- 权限问题:HDFS 目录属主与运行用户保持一致,避免权限拒绝。
- 扩展
- 新增 DataNode:同步配置至新节点,创建数据目录,启动 DataNode(可在新节点执行:hdfs --daemon start datanode),再用 hdfs dfsadmin -report 查看。
- 高可用(HA):引入 ZooKeeper 与 ZKFC,配置 JournalNode 与 Active/Standby NameNode,实现故障自动切换。