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

相关推荐
青云计划9 小时前
知光项目知文发布模块
java·后端·spring·mybatis
Victor3569 小时前
MongoDB(9)什么是MongoDB的副本集(Replica Set)?
后端
Victor3569 小时前
MongoDB(8)什么是聚合(Aggregation)?
后端
yeyeye11111 小时前
Spring Cloud Data Flow 简介
后端·spring·spring cloud
Tony Bai11 小时前
告别 Flaky Tests:Go 官方拟引入 testing/nettest,重塑内存网络测试标准
开发语言·网络·后端·golang·php
+VX:Fegn089512 小时前
计算机毕业设计|基于springboot + vue鲜花商城系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
程序猿阿伟12 小时前
《GraphQL批处理与全局缓存共享的底层逻辑》
后端·缓存·graphql
小小张说故事12 小时前
SQLAlchemy 技术入门指南
后端·python
识君啊12 小时前
SpringBoot 事务管理解析 - @Transactional 的正确用法与常见坑
java·数据库·spring boot·后端
想用offer打牌13 小时前
MCP (Model Context Protocol) 技术理解 - 第五篇
人工智能·后端·mcp