从零开始搭建 Hadoop 完全分布式集群(超详细图文指南)

从零开始搭建 Hadoop 完全分布式集群(超详细图文指南)

面向零基础用户,手把手教你部署一个可运行的 Hadoop 完全分布式环境


一、前言:什么是"完全分布式"?

Hadoop 支持三种运行模式:

  • 本地模式(Standalone) :单机运行,无 HDFS,仅用于调试。
  • 伪分布式模式(Pseudo-Distributed) :单机模拟多进程,所有守护进程运行在同一台机器上。
  • 完全分布式模式(Fully Distributed) :真正的集群部署,NameNode、DataNode、ResourceManager 等角色分布在多台物理或虚拟机上。

本文将带你从零开始,在 3 台 Linux 虚拟机 上搭建一个最小可用的 Hadoop 完全分布式集群(1 个 NameNode + 2 个 DataNode),适合学习、实验和小型开发环境。


二、准备工作

1. 硬件与软件要求

组件 要求
操作系统 CentOS 7 / Ubuntu 20.04(推荐 CentOS 7)
虚拟机数量 3 台(内存建议 ≥2GB/台)
JDK OpenJDK 8 或 Oracle JDK 8(Hadoop 3.x 不兼容 JDK 11+ 的部分特性)
Hadoop 版本 Hadoop 3.3.6(稳定版)

💡 提示:本文以 CentOS 7 + Hadoop 3.3.6 + OpenJDK 8 为例。

2. 节点规划

主机名 IP 地址 角色
hadoop101 192.168.10.101 NameNode, ResourceManager
hadoop102 192.168.10.102 DataNode, NodeManager
hadoop103 192.168.10.103 DataNode, NodeManager

✅ 建议使用固定 IP,避免 DHCP 变化导致集群失效。


三、基础环境配置(每台机器都要做)

步骤 1:设置主机名

csharp 复制代码
# 在 hadoop101 上执行
sudo hostnamectl set-hostname hadoop101

# 在 hadoop102 上执行
sudo hostnamectl set-hostname hadoop102

# 在 hadoop103 上执行
sudo hostnamectl set-hostname hadoop103

步骤 2:配置 hosts 文件(三台机器同步)

编辑 /etc/hosts,添加以下内容:

复制代码
192.168.10.101 hadoop101
192.168.10.102 hadoop102
192.168.10.103 hadoop103

✅ 执行 ping hadoop102 测试是否能解析。

步骤 3:关闭防火墙(实验环境)

arduino 复制代码
sudo systemctl stop firewalld
sudo systemctl disable firewalld

🔒 生产环境应配置安全组或 iptables 规则,而非直接关闭。

步骤 4:安装 OpenJDK 8

复制代码
sudo yum install -y java-1.8.0-openjdk-devel

验证安装:

复制代码
java -version
javac -version

步骤 5:配置 SSH 免密登录(关键!)

Hadoop 集群依赖 SSH 进行节点间通信。需在 NameNode(hadoop101) 上生成密钥,并分发到所有节点。

python 复制代码
# 在 hadoop101 上操作
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

# 分发公钥到所有节点(包括自己)
ssh-copy-id hadoop101
ssh-copy-id hadoop102
ssh-copy-id hadoop103

测试免密登录:

bash 复制代码
ssh hadoop102  # 应无需密码直接登录

⚠️ 若提示"Permission denied",请确保目标机器的 /etc/ssh/sshd_configPubkeyAuthentication yes 已启用,并重启 sshd:sudo systemctl restart sshd


四、安装与配置 Hadoop

步骤 1:下载并解压 Hadoop

hadoop101 上操作:

bash 复制代码
cd /opt
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.6/hadoop-3.3.6.tar.gz
tar -zxvf hadoop-3.3.6.tar.gz
mv hadoop-3.3.6 hadoop

步骤 2:配置环境变量

编辑 ~/.bashrc(或 /etc/profile):

bash 复制代码
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

生效配置:

bash 复制代码
source ~/.bashrc

步骤 3:分发 Hadoop 到其他节点

bash 复制代码
scp -r /opt/hadoop hadoop102:/opt/
scp -r /opt/hadoop hadoop103:/opt/

并在 hadoop102、hadoop103 上同样配置 ~/.bashrc 中的环境变量。


五、核心配置文件修改(在 hadoop101 上操作)

进入 $HADOOP_HOME/etc/hadoop 目录,修改以下文件:

1. core-site.xml

xml 复制代码
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop101:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data/tmp</value>
    </property>
</configuration>

2. hdfs-site.xml

xml 复制代码
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>2</value> <!-- 副本数不超过 DataNode 数量 -->
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop/data/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop/data/datanode</value>
    </property>
</configuration>

3. yarn-site.xml

xml 复制代码
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop101</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value> <!-- 避免内存检查失败 -->
    </property>
</configuration>

4. mapred-site.xml

xml 复制代码
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

5. workers 文件(替代旧版 slaves)

复制代码
hadoop102
hadoop103

✅ 注意:Hadoop 3.x 使用 workers 文件定义 DataNode 和 NodeManager 节点。


六、格式化 NameNode 并启动集群

1. 格式化 HDFS(仅首次执行!)

lua 复制代码
hdfs namenode -format

⚠️ 重复执行会清空 HDFS 数据!

2. 启动 HDFS

sql 复制代码
start-dfs.sh

3. 启动 YARN

sql 复制代码
start-yarn.sh

4. 验证进程

  • hadoop101 应有:NameNode、SecondaryNameNode、ResourceManager
  • hadoop102 / hadoop103 应有:DataNode、NodeManager

使用 jps 命令查看。

5. Web UI 验证

✅ 若无法访问,请检查防火墙或网络配置。


七、运行 WordCount 示例测试

bash 复制代码
# 创建 HDFS 目录
hdfs dfs -mkdir /input

# 上传本地文件
echo "hello hadoop hello world" > /tmp/test.txt
hdfs dfs -put /tmp/test.txt /input

# 运行 MapReduce 任务
hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /input /output

# 查看结果
hdfs dfs -cat /output/*

若输出:

复制代码
hadoop	1
hello	2
world	1

说明集群运行成功!


八、常见问题排查

问题 解决方案
DataNode 无法启动 检查 workers 文件、SSH 免密、时间同步
NameNode 格式化失败 删除 hadoop.tmp.dir 目录后重试
Web UI 无法访问 关闭防火墙或开放 9870/8088 端口
"NativeIO" 报错 忽略(不影响功能),或编译 native 库

九、结语

通过本文,你已成功搭建了一个 3 节点的 Hadoop 完全分布式集群。虽然步骤较多,但每一步都是理解 Hadoop 架构的关键。掌握此过程,不仅有助于学习大数据生态(如 Hive、HBase、Spark),也为后续深入分布式系统打下坚实基础。

相关推荐
cjy0001112 小时前
springboot的 nacos 配置获取不到导致启动失败及日志不输出问题
java·spring boot·后端
小江的记录本3 小时前
【事务】Spring Framework核心——事务管理:ACID特性、隔离级别、传播行为、@Transactional底层原理、失效场景
java·数据库·分布式·后端·sql·spring·面试
sheji34163 小时前
【开题答辩全过程】以 基于springboot的校园失物招领系统为例,包含答辩的问题和答案
java·spring boot·后端
程序员cxuan3 小时前
人麻了,谁把我 ssh 干没了
人工智能·后端·程序员
wuyikeer4 小时前
Spring Framework 中文官方文档
java·后端·spring
Victor3564 小时前
MongoDB(61)如何避免大文档带来的性能问题?
后端
Victor3564 小时前
MongoDB(62)如何避免锁定问题?
后端
wuyikeer5 小时前
Spring BOOT 启动参数
java·spring boot·后端
子木HAPPY阳VIP6 小时前
Ubuntu 22.04 VMware 设置固定IP配置
人工智能·后端·目标检测·机器学习·目标跟踪
人间打气筒(Ada)6 小时前
如何基于 Go-kit 开发 Web 应用:从接口层到业务层再到数据层
开发语言·后端·golang