超详细 Hadoop 集群搭建指南:从环境准备到成功启动
作为大数据生态体系的核心框架,Hadoop 的分布式集群部署是入门大数据技术的关键一步。本文将以Hadoop 3.3.4 版本为例,带大家从零开始搭建一个 3 节点(1 主 2 从)的 Hadoop 集群,全程附带关键配置代码和避坑要点,确保新手也能顺利完成搭建。
一、环境准备:打好集群基础
在正式搭建前,需先完成硬件规划、操作系统配置和软件依赖安装,这是集群稳定运行的前提。
1.1 集群节点规划
本次搭建采用 “1 主 2 从” 架构,节点角色分配如下(可根据实际服务器数量调整):
节点 IP
主机名
角色
硬件建议(最低配置)
192.168.1.10
hadoop01
NameNode、ResourceManager
2 核 4G 内存、50G 硬盘
192.168.1.11
hadoop02
DataNode、NodeManager
2 核 2G 内存、50G 硬盘
192.168.1.12
hadoop03
DataNode、NodeManager
2 核 2G 内存、50G 硬盘
注意:所有节点需处于同一局域网,且关闭防火墙(避免端口拦截)。
1.2 操作系统配置(所有节点执行)
本文使用CentOS 7系统,以下操作需以root用户或sudo权限执行:
(1)关闭防火墙与 SELinux
Hadoop 集群各节点间需通过多个端口通信,关闭防火墙可避免配置复杂的端口规则:
1
2
3
4
5
6
7
8
9
10
11
# 关闭防火墙(临时+永久)
systemctl stop firewalld
systemctl disable firewalld
# 关闭SELinux(临时+永久)
setenforce 0
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
(2)配置主机名与 IP 映射
设置主机名(每个节点执行对应命令):
1
2
3
4
5
6
7
8
9
10
11
# hadoop01节点
hostnamectl set-hostname hadoop01
# hadoop02节点
hostnamectl set-hostname hadoop02
# hadoop03节点
hostnamectl set-hostname hadoop03
配置 IP 映射(所有节点执行,将 IP 替换为你的实际节点 IP):
1
2
3
4
5
echo "192.168.1.10 hadoop01" >> /etc/hosts
echo "192.168.1.11 hadoop02" >> /etc/hosts
echo "192.168.1.12 hadoop03" >> /etc/hosts
(3)安装 Java 环境
Hadoop 依赖 Java(需 JDK 8 及以上版本),推荐使用 OpenJDK:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 安装OpenJDK 8
yum install -y java-1.8.0-openjdk-devel
# 验证安装(出现版本信息则成功)
java -version
javac -version
# 配置JAVA_HOME环境变量(所有节点执行)
echo "export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk" >> /etc/profile
echo "export PATH=$PATH:$JAVA_HOME/bin" >> /etc/profile
source /etc/profile # 生效配置
1.3 配置 SSH 免密登录(主节点→从节点)
Hadoop 主节点(hadoop01)需通过 SSH 免密登录到所有从节点,避免启动集群时输入密码:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 在hadoop01节点生成SSH密钥(一路回车,不设置密码)
ssh-keygen -t rsa
# 将公钥分发到所有节点(包括自身)
ssh-copy-id hadoop01
ssh-copy-id hadoop02
ssh-copy-id hadoop03
# 验证免密登录(无密码提示则成功)
ssh hadoop02
二、Hadoop 安装与核心配置
2.1 下载并解压 Hadoop(主节点执行)
从 Apache 官网下载 Hadoop 安装包,推荐使用稳定版 3.3.4:
1
2
3
4
5
6
7
8
9
10
11
# 下载Hadoop(也可手动下载后上传)
wget https://archive.apache.org/dist/hadoop/core/hadoop-3.3.4/hadoop-3.3.4.tar.gz
# 解压到/usr/local目录
tar -zxvf hadoop-3.3.4.tar.gz -C /usr/local/
# 重命名为hadoop(方便后续操作)
mv /usr/local/hadoop-3.3.4 /usr/local/hadoop
2.2 配置 Hadoop 环境变量(所有节点执行)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 编辑profile文件
vim /etc/profile
# 添加以下内容(末尾添加)
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 生效配置
source /etc/profile
# 验证(出现版本信息则成功)
hadoop version
2.3 修改 Hadoop 核心配置文件(主节点执行)
Hadoop 配置文件位于$HADOOP_HOME/etc/hadoop/目录,需修改以下 5 个关键文件:
(1)hadoop-env.sh(指定 Java 路径)
1
2
3
4
5
vim $HADOOP_HOME/etc/hadoop/hadoop-env.sh
# 添加Java环境变量(替换为你的JAVA_HOME路径)
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk
(2)core-site.xml(核心配置:指定 NameNode 地址)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vim $HADOOP_HOME/etc/hadoop/core-site.xml
# 在
(3)hdfs-site.xml(HDFS 配置:副本数、NameNode/DataNode 存储路径)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
vim $HADOOP_HOME/etc/hadoop/hdfs-site.xml
# 在
(4)mapred-site.xml(MapReduce 配置:指定 YARN 为资源管理器)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
vim $HADOOP_HOME/etc/hadoop/mapred-site.xml
# 在
(5)yarn-site.xml(YARN 配置:指定 ResourceManager 地址、节点管理器环境)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
vim $HADOOP_HOME/etc/hadoop/yarn-site.xml
# 在
2.4 指定从节点(主节点执行)
编辑workers文件(Hadoop 3.x 用workers,2.x 用slaves),列出所有从节点主机名:
1
2
3
4
5
6
7
vim $HADOOP_HOME/etc/hadoop/workers
# 删除原有内容,添加以下两行(从节点主机名):
hadoop02
hadoop03
2.5 同步配置到所有从节点(主节点执行)
将主节点配置好的 Hadoop 目录同步到所有从节点,避免重复配置:
1
2
3
4
5
6
7
8
9
10
11
12
13
# 同步到hadoop02
scp -r /usr/local/hadoop hadoop02:/usr/local/
# 同步到hadoop03
scp -r /usr/local/hadoop hadoop03:/usr/local/
# 同步环境变量配置(所有从节点执行source生效)
scp /etc/profile hadoop02:/etc/
scp /etc/profile hadoop03:/etc/
2.6 创建 Hadoop 数据目录(所有节点执行)
根据hdfs-site.xml中配置的路径,创建对应的目录:
1
2
3
4
5
6
7
8
9
mkdir -p /usr/local/hadoop/tmp
mkdir -p /usr/local/hadoop/dfs/name
mkdir -p /usr/local/hadoop/dfs/data
# 设置目录权限(避免权限不足)
chown -R $USER:$USER /usr/local/hadoop/
三、格式化 HDFS 与启动集群
3.1 格式化 NameNode(仅主节点执行)
注意:仅首次搭建时执行一次,重复执行会清空 HDFS 数据!
1
hdfs namenode -format
执行成功后,会显示successfully formatted字样,同时在/usr/local/hadoop/dfs/name目录下生成初始化数据。
3.2 启动 Hadoop 集群(主节点执行)
Hadoop 提供两种启动方式:分步启动(便于排查问题)和一键启动(高效)。
(1)分步启动(推荐新手)
1
2
3
4
5
6
7
8
9
10
11
# 启动HDFS(NameNode、DataNode)
hdfs --daemon start namenode
hdfs --daemon start datanode
# 启动YARN(ResourceManager、NodeManager)
yarn --daemon start resourcemanager
yarn --daemon start nodemanager
(2)一键启动(配置好 workers 后可用)
1
2
3
4
5
6
7
8
9
# 启动所有HDFS和YARN进程
start-dfs.sh
start-yarn.sh
# 或直接启动所有进程(包括HistoryServer)
start-all.sh
3.3 验证集群状态
(1)查看进程(主节点执行)
1
jps
主节点应显示以下进程:
NameNode
ResourceManager
SecondaryNameNode(HDFS 辅助节点)
Jps
从节点(hadoop02、hadoop03)应显示:
DataNode
NodeManager
Jps
(2)Web UI 验证
Hadoop 提供 Web 界面查看集群状态,需确保浏览器能访问节点 IP:
HDFS 状态:访问 http://hadoop01:9870(Hadoop 3.x 端口为 9870,2.x 为 50070),在「Datanodes」页面可看到 2 个从节点在线。
YARN 状态:访问 http://hadoop01:8088,在「Nodes」页面可看到 2 个 NodeManager 节点。
(3)执行 HDFS 命令验证
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
# 创建测试目录
hdfs dfs -mkdir /test
# 上传本地文件到HDFS
echo "hello hadoop" > test.txt
hdfs dfs -put test.txt /test/
# 查看HDFS文件
hdfs dfs -ls /test/
hdfs dfs -cat /test/test.txt
若能正常执行上述命令,说明 HDFS 功能正常。
四、常见问题与避坑指南
启动 DataNode 失败?
原因:重复格式化 NameNode 导致 DataNode 的 clusterID 与 NameNode 不匹配。
解决:删除所有节点的/usr/local/hadoop/dfs/data目录,重新格式化 NameNode(仅一次)。
Web UI 无法访问?
原因:防火墙未关闭、IP 映射配置错误或端口被占用。
解决:重新执行防火墙关闭命令,检查/etc/hosts配置,用netstat -tunlp | grep 9870查看端口是否被占用。
YARN 启动后 NodeManager 不在线?
原因:yarn-site.xml配置错误或内存不足。
解决:检查yarn.resourcemanager.hostname是否为 hadoop01,添加yarn.nodemanager.vmem-check-enabled=false关闭内存检查。
五、总结
本文详细讲解了 3 节点 Hadoop 集群的搭建流程,核心步骤可概括为:环境准备→配置免密→Hadoop 配置→同步节点→格式化启动→验证状态。对于新手而言,重点关注 IP 映射、SSH 免密、配置文件路径和权限这几个环节,即可避免大部分问题。
后续可进一步学习 Hadoop 的分布式计算(MapReduce)、YARN 资源调度等功能,或搭建 HBase、Spark 等生态组件,逐步深入大数据技术领域。
(注:文档部分内容由 AI 生成)