从零开始搭建 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),也为后续深入分布式系统打下坚实基础。

相关推荐
国思RDIF框架17 小时前
RDIFramework.NET CS 敏捷开发框架 V6.3 版本重磅发布!.NET8+Framework双引擎,性能升级全维度进化
后端·.net
心在飞扬17 小时前
ReRank重排序提升RAG系统效果
前端·后端
喝茶与编码17 小时前
Python异步并发控制:asyncio.gather 与 Semaphore 协同设计解析
后端·python
不早睡不改名17 小时前
网络编程基础:从BIO到NIO再到AIO(一)
后端
开源之眼17 小时前
《github star 加星 Taimili.com 艾米莉 》为什么Java里面,Service 层不直接返回 Result 对象?
java·后端·github
心在飞扬17 小时前
RAPTOR 递归文档树优化策略
前端·后端
zone773918 小时前
003:RAG 入门-LangChain 读取图片数据
后端·python·面试
心在飞扬18 小时前
LangChain Parent Document Retriever (父文档检索器)
后端
zone773918 小时前
002:RAG 入门-LangChain 读取文本
后端·算法·面试
用户83562907805118 小时前
在 PowerPoint 中用 Python 添加和定制形状的完整教程
后端·python