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 免密登录(后续详细说明)
# 配置主机名
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。

# 检查系统是否已有 JDK
java -version

# 查找 JDK 安装路径
find /usr -name "java" 2>/dev/null

如果未安装,使用 yum 安装:

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 上执行:

# 创建安装目录
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 创建软链接

ln -s /export/server/hadoop-3.4.3 /export/server/hadoop

软链接便于版本管理和后续脚本引用。

3.3 分发到 node2、node3

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,追加以下内容:

# 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 同步到所有节点

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 验证

hadoop version

输出 Hadoop 版本信息即表示配置成功。


五、Hadoop 核心配置

5.1 core-site.xml

vim /export/server/hadoop/etc/hadoop/core-site.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

vim /export/server/hadoop/etc/hadoop/hdfs-site.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 创建数据目录

mkdir -p /data/nn /data/dn

六、创建 hadoop 用户并授权

Hadoop 不建议以 root 用户运行,需要创建专用用户。

6.1 创建用户(三个节点)

useradd -m hadoop -s /bin/bash
echo "hadoop" | passwd --stdin hadoop

6.2 配置 sudo 权限

echo "hadoop ALL=(ALL) NOPASSWD:ALL" >> /etc/sudoers

6.3 配置免密登录

node1 切换到 hadoop 用户:

su - hadoop
ssh-keygen -t rsa -P "" -f ~/.ssh/id_rsa

分发公钥到三个节点:

ssh-copy-id hadoop@node1
ssh-copy-id hadoop@node2
ssh-copy-id hadoop@node3

首次需要输入密码 hadoop,之后即可免密登录。

6.4 目录权限授权

chown -R hadoop:hadoop /data
chown -R hadoop:hadoop /export

在 node2、node3 上执行相同操作。


七、格式化 NameNode 并启动

7.1 格式化文件系统

仅在 node1 执行一次!

su - hadoop
hadoop namenode -format

⚠️ 格式化会清空 HDFS 元数据,生产环境谨慎操作。

7.2 启动 HDFS 集群

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 验证进程

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 命令时不在压缩包所在目录,且未使用绝对路径。

解决

tar -zxvf /root/Downloads/hadoop-3.4.3.tar.gz -C /export/server

8.2 软链接显示红色

原因:软链接指向的目标目录不存在。

解决

# 重新复制并创建软链接
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 配置错误。

解决

# 使用绝对路径执行
/export/server/hadoop/sbin/start-dfs.sh

# 或重新加载环境变量
source /etc/profile

8.4 chown: 无法访问 ‘/data’

原因:目录不存在。

解决

mkdir -p /data/nn /data/dn
chown -R hadoop:hadoop /data

九、HDFS 常用操作

# 查看 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

十、关闭集群

# 关闭 HDFS
stop-dfs.sh

# 或使用绝对路径
/export/server/hadoop/sbin/stop-dfs.sh

总结

本文完整记录了 VMware 环境下 HDFS 集群的部署流程:

  1. ✅ 环境准备(网络、主机名、JDK)
  2. ✅ Hadoop 安装与分发
  3. ✅ 环境变量配置
  4. ✅ 核心配置文件(core-site.xml、hdfs-site.xml)
  5. ✅ hadoop 用户创建与免密登录
  6. ✅ NameNode 格式化与 HDFS 启动
  7. ✅ 常见问题排查

HDFS 作为 Hadoop 生态的基石,掌握其部署和运维是大数据开发的必备技能。后续可以继续配置 YARN(资源调度)和 MapReduce(计算框架),构建完整的大数据平台。

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐