VMware 中部署 HDFS 集群环境(Hadoop 3.4.3)完整指南
本文详细记录从零开始在 VMware 虚拟机中搭建 3 节点 Hadoop HDFS 分布式文件系统集群的全过程,基于 CentOS 系统,Hadoop 版本 3.4.3。
一、环境准备
1.1 硬件与软件环境
| 项目 | 配置 |
|---|---|
| 虚拟化平台 | VMware Workstation / ESXi |
| 操作系统 | CentOS 7/8 或兼容的 Linux 发行版 |
| 节点数量 | 3 台(node1, node2, node3) |
| 单节点配置 | 2核 CPU / 4G 内存 / 20G 磁盘 |
| JDK 版本 | OpenJDK 17(或 JDK 8/11) |
| Hadoop 版本 | 3.4.3 |
1.2 网络规划
| 节点 | IP 地址 | 角色 |
|---|---|---|
| node1 | 192.168.19.129 | NameNode + DataNode + SecondaryNameNode |
| node2 | 192.168.19.xxx | DataNode |
| node3 | 192.168.19.xxx | DataNode |
1.3 基础环境配置
确保三台虚拟机:
- 网络互通(互相能 ping 通)
- 已配置主机名和
/etc/hosts解析 - 已关闭防火墙或开放必要端口
- 已配置 SSH 免密登录(后续详细说明)
bash
# 配置主机名
hostnamectl set-hostname node1 # node2/node3 同理
# 配置 hosts
cat >> /etc/hosts << 'EOF'
192.168.19.129 node1
192.168.19.130 node2
192.168.19.131 node3
EOF
二、JDK 环境安装
Hadoop 基于 Java 开发,必须预先安装 JDK。
bash
# 检查系统是否已有 JDK
java -version
# 查找 JDK 安装路径
find /usr -name "java" 2>/dev/null
如果未安装,使用 yum 安装:
bash
yum install -y java-1.8.0-openjdk java-1.8.0-openjdk-devel
注意:Hadoop 3.4.x 官方推荐 JDK 8 或 JDK 11。本文使用系统自带的 OpenJDK 17,测试可用但生产环境建议用 JDK 8。
三、Hadoop 安装与分发
3.1 下载并解压 Hadoop
在 node1 上执行:
bash
# 创建安装目录
mkdir -p /export/server
# 下载 Hadoop(或提前下载好上传到 /root/Downloads)
cd /opt
wget https://archive.apache.org/dist/hadoop/common/hadoop-3.4.3/hadoop-3.4.3.tar.gz
# 解压到目标目录
tar -zxvf hadoop-3.4.3.tar.gz -C /export/server/
常见问题 :如果在非文件所在目录执行
tar,会报No such file or directory。请使用绝对路径或先cd到文件目录。
3.2 创建软链接
bash
ln -s /export/server/hadoop-3.4.3 /export/server/hadoop
软链接便于版本管理和后续脚本引用。
3.3 分发到 node2、node3
bash
cd /export/server
# 确保目标节点有 /export/server 目录
ssh node2 "mkdir -p /export/server"
ssh node3 "mkdir -p /export/server"
# 复制 Hadoop 安装包
scp -r hadoop-3.4.3 node2:/export/server/
scp -r hadoop-3.4.3 node3:/export/server/
# 在 node2、node3 创建软链接
ssh node2 "ln -s /export/server/hadoop-3.4.3 /export/server/hadoop"
ssh node3 "ln -s /export/server/hadoop-3.4.3 /export/server/hadoop"
常见问题 :如果软链接显示为红色,说明目标目录不存在(scp 未成功)。重新复制并创建软链接即可。
四、环境变量配置
4.1 配置 JAVA_HOME 和 HADOOP_HOME
编辑 /etc/profile,追加以下内容:
bash
# Java
export JAVA_HOME=/usr/lib/jvm/java-17-openjdk-17.0.15.6-4.ky3_5.kb1.x86_64
# Hadoop
export HADOOP_HOME=/export/server/hadoop
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
注意:
JAVA_HOME路径根据你的实际 JDK 路径修改。
4.2 同步到所有节点
bash
scp /etc/profile node2:/etc/
scp /etc/profile node3:/etc/
# 分别生效
source /etc/profile
ssh node2 "source /etc/profile"
ssh node3 "source /etc/profile"
4.3 验证
bash
hadoop version
输出 Hadoop 版本信息即表示配置成功。
五、Hadoop 核心配置
5.1 core-site.xml
bash
vim /export/server/hadoop/etc/hadoop/core-site.xml
内容如下:
xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:8020</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
5.2 hdfs-site.xml
bash
vim /export/server/hadoop/etc/hadoop/hdfs-site.xml
内容如下:
xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>dfs.datanode.data.dir.perm</name>
<value>700</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/nn</value>
</property>
<property>
<name>dfs.namenode.hosts</name>
<value>node1,node2,node3</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/dn</value>
</property>
</configuration>
5.3 创建数据目录
bash
mkdir -p /data/nn /data/dn
六、创建 hadoop 用户并授权
Hadoop 不建议以 root 用户运行,需要创建专用用户。
6.1 创建用户(三个节点)
bash
useradd -m hadoop -s /bin/bash
echo "hadoop" | passwd --stdin hadoop
6.2 配置 sudo 权限
bash
echo "hadoop ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers
6.3 配置免密登录
在 node1 切换到 hadoop 用户:
bash
su - hadoop
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa
分发公钥到三个节点:
bash
ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2
ssh-copy-id hadoop@node3
首次需要输入密码
hadoop,之后即可免密登录。
6.4 目录权限授权
bash
chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export
在 node2、node3 上执行相同操作。
七、格式化 NameNode 并启动
7.1 格式化文件系统
仅在 node1 执行一次!
bash
su - hadoop
hadoop namenode -format
⚠️ 格式化会清空 HDFS 元数据,生产环境谨慎操作。
7.2 启动 HDFS 集群
bash
start-dfs.sh
输出示例:
Starting namenodes on [node1]
node1: Authorized users only. All activities may be monitored and reported.
Starting datanodes
node2: Authorized users only. All activities may be monitored and reported.
node3: Authorized users only. All activities may be monitored and reported.
Starting secondary namenodes [node1]
Authorized users only是 SSH 安全提示,不影响启动。
7.3 验证进程
bash
jps
node1 预期输出:
NameNode
DataNode
SecondaryNameNode
Jps
node2、node3 预期输出:
DataNode
Jps
7.4 Web UI 验证
浏览器访问:
http://node1:9870
可以看到:
- Live Nodes: 3
- HDFS 容量和使用情况
- 各 DataNode 状态
八、常见问题与解决
8.1 tar: No such file or directory
原因:执行 tar 命令时不在压缩包所在目录,且未使用绝对路径。
解决:
bash
tar -zxvf /root/Downloads/hadoop-3.4.3.tar.gz -C /export/server
8.2 软链接显示红色
原因:软链接指向的目标目录不存在。
解决:
bash
# 重新复制并创建软链接
scp -r /export/server/hadoop-3.4.3 node2:/export/server/
ssh node2 "rm -f /export/server/hadoop && ln -s /export/server/hadoop-3.4.3 /export/server/hadoop"
8.3 命令未找到(start-dfs.sh)
原因:环境变量未生效或 PATH 配置错误。
解决:
bash
# 使用绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh
# 或重新加载环境变量
source /etc/profile
8.4 chown: 无法访问 '/data'
原因:目录不存在。
解决:
bash
mkdir -p /data/nn /data/dn
chown -R hadoop:hadoop /data
九、HDFS 常用操作
bash
# 查看 HDFS 根目录
hdfs dfs -ls /
# 创建目录
hdfs dfs -mkdir /user
hdfs dfs -mkdir /user/hadoop
# 上传文件
hdfs dfs -put localfile.txt /user/hadoop/
# 下载文件
hdfs dfs -get /user/hadoop/localfile.txt ./
# 查看文件内容
hdfs dfs -cat /user/hadoop/localfile.txt
# 删除文件
hdfs dfs -rm /user/hadoop/localfile.txt
十、关闭集群
bash
# 关闭 HDFS
stop-dfs.sh
# 或使用绝对路径
/export/server/hadoop/sbin/stop-dfs.sh
总结
本文完整记录了 VMware 环境下 HDFS 集群的部署流程:
- ✅ 环境准备(网络、主机名、JDK)
- ✅ Hadoop 安装与分发
- ✅ 环境变量配置
- ✅ 核心配置文件(core-site.xml、hdfs-site.xml)
- ✅ hadoop 用户创建与免密登录
- ✅ NameNode 格式化与 HDFS 启动
- ✅ 常见问题排查
HDFS 作为 Hadoop 生态的基石,掌握其部署和运维是大数据开发的必备技能。后续可以继续配置 YARN(资源调度)和 MapReduce(计算框架),构建完整的大数据平台。