Hadoop 3.3.6 安装与配置全攻略:从本地模式到完全分布式集群搭建
目录
什么是 Hadoop?
Hadoop 是一个开源的分布式计算框架,由 Apache 软件基金会开发和维护。它主要用于处理海量数据(大数据)的存储和计算问题,能够在成百上千台普通商用服务器组成的集群上可靠、可扩展地运行。
1.Hadoop 的核心组件
Hadoop 生态系统主要由以下核心组件构成:
-
HDFS(Hadoop Distributed File System):分布式文件系统,提供高吞吐量的数据访问,能够将大文件分割成多个块(默认128MB)并分布存储在集群的不同节点上。
-
MapReduce:分布式计算框架,采用"分而治之"的思想,将计算任务分解为 Map(映射)和 Reduce(归约)两个阶段,适合处理大规模数据集的并行计算。
-
YARN(Yet Another Resource Negotiator):资源管理和作业调度系统,负责集群资源的管理和分配。
2.Hadoop 的主要特点
高可靠性:数据自动在集群中复制多份,防止单点故障。
高扩展性:可通过增加节点线性扩展存储和计算能力。
高容错性:能够自动检测和处理节点故障。
低成本:可在普通商用硬件上运行,降低硬件成本。
高效性:通过数据本地化处理减少网络传输开销。
3.Hadoop 的三种运行模式
1.本地模式(Local Mode):所有组件运行在单个JVM中,适合开发和调试。
2.伪分布式模式(Pseudo-Distributed Mode):所有守护进程运行在单台机器上,模拟分布式环境。
3.完全分布式模式(Fully Distributed Mode):真正的分布式部署,在多台机器上运行。
本文演示的是 Hadoop 的本地模式安装和运行,这是学习和测试 Hadoop 功能的最简单方式。
准备Hadoop 集群
本文详细记录在 CentOS/RHEL 系统上搭建 Hadoop 3.3.6 单机模式环境
1. 环境准备与软件下载
首先确保系统已安装必要的开发工具,然后下载 Hadoop 和 JDK:
# 查看当前目录下的文件
[root@server1 ~]# ls
anaconda-ks.cfg hadoop-3.3.6.tar.gz jdk-8u181-linux-x64.tar.gz
创建 hadoop 用户(建议使用专用用户运行 Hadoop)
[root@server1 ~]# useradd hadoop
将软件包移动到 hadoop 用户的家目录
[root@server1 ~]# mv hadoop-3.3.6.tar.gz jdk-8u181-linux-x64.tar.gz /home/hadoop
切换到 hadoop 用户
[root@server1 ~]# su - hadoop
2. JDK 与 Hadoop 解压配置
以 hadoop 用户身份解压软件包并创建软链接:
[hadoop@server1 ~]$ ls
hadoop-3.3.6.tar.gz jdk-8u181-linux-x64.tar.gz
解压 Hadoop 和 JDK
[hadoop@server1 ~]$ tar zxf hadoop-3.3.6.tar.gz
[hadoop@server1 ~]$ tar zxf jdk-8u181-linux-x64.tar.gz
创建软链接方便后续引用
[hadoop@server1 ~]$ ln -s hadoop-3.3.6 hadoop
[hadoop@server1 ~]$ ln -s jdk1.8.0_181 jdk
3. 环境变量配置
配置 Java 环境变量和 Hadoop 环境:
# 编辑 .bash_profile 添加 JDK 到 PATH
[hadoop@server1 ~]$ vim .bash_profile
# 在文件末尾添加:
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/home/hadoop/jdk/bin
使配置生效
[hadoop@server1 ~]$ source .bash_profile
进入 Hadoop 配置目录
[hadoop@server1 hadoop]$ cd etc/
[hadoop@server1 etc]$ ls
hadoop
[hadoop@server1 etc]$ cd hadoop/
配置 Hadoop 环境变量,设置 JAVA_HOME
[hadoop@server1 hadoop]$ vim hadoop-env.sh
找到并修改 JAVA_HOME 配置:
export JAVA_HOME=/home/hadoop/jdk
确认当前目录
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
返回 Hadoop 安装根目录
[hadoop@server1 hadoop]$ cd ..
[hadoop@server1 etc]$ cd ..
查看 Hadoop 目录结构
[hadoop@server1 hadoop]$ ls
bin include libexec licenses-binary NOTICE-binary README.txt share
etc lib LICENSE-binary LICENSE.txt NOTICE.txt sbin
测试 Hadoop 命令是否可用
[hadoop@server1 hadoop]$ bin/hadoop version
运行Hadoop 独立模式
需额外配置即可运行。我们使用 grep 示例程序:
# 创建输入目录
[hadoop@server1 hadoop]$ mkdir input
复制配置文件作为输入数据
[hadoop@server1 hadoop]$ cp etc/hadoop/*.xml input
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar grep input output 'dfs[a-z.]+'
查看输出结果
[hadoop@server1 hadoop]$ cd output/
[hadoop@server1 output]$ ls
part-r-00000 _SUCCESS
运行 grep 示例程序
功能:在 input 目录的文件中搜索匹配 'dfs[a-z.]+' 正则表达式的行
参数说明:
- jar: 指定 MapReduce 示例程序 jar 包
- grep: 使用 grep 示例程序
- input: 输入目录
- output: 输出目录(会自动创建)
- 'dfs[a-z.]+': 搜索模式,匹配以 dfs 开头,后跟小写字母或点的字符串
结果验证与说明
运行结果说明:
- _SUCCESS 文件:表示作业执行成功
- part-r-00000 文件:包含 grep 作业的输出结果,格式为 "匹配到的文本\t出现次数"
查看具体结果:
[hadoop@server1 output]$ cat part-r-00000
1 dfsadmin
运行伪分布式模式
伪分布式模式是 Hadoop 在单台机器上模拟分布式环境运行的方式,所有守护进程(NameNode、DataNode、ResourceManager 等)都在同一台机器上启动,但使用分布式文件系统 HDFS 进行数据存储。以下是配置和运行伪分布式模式的详细步骤:
1. 修改配置文件
首先需要修改 Hadoop 的核心配置文件,启用 HDFS 并设置相关参数:
配置 core-site.xml:设置默认文件系统为 HDFS
[hadoop@server1 hadoop]$ cd etc/hadoop
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
配置 hdfs-site.xml:设置数据副本数量(伪分布式模式下设为 1)
[hadoop@server1 hadoop]$ vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
配置 SSH 免密登录:Hadoop 需要 SSH 无密码访问本地主机
[hadoop@server1 hadoop]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
[hadoop@server1 hadoop]$ ssh-copy-id localhost
2. 初始化 HDFS
在启动 HDFS 之前,需要格式化 NameNode:
[hadoop@server1 hadoop]$ cd /home/hadoop/hadoop
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
注意:格式化操作会清空 HDFS 上的所有数据,仅在生产环境初始化或测试时执行。
3. 启动 HDFS 服务
使用以下命令启动 HDFS 守护进程:
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [localhost]
Starting datanodes
Starting secondary namenodes [server1]
验证服务是否正常启动:
[hadoop@server1 hadoop]$ jps
4465 NameNode
4579 DataNode
4921 Jps
4765 SecondaryNameNode
应该能看到 NameNode、DataNode 和 SecondaryNameNode 进程。
4. 访问 Web 管理界面
HDFS 提供了一个 Web 管理界面,默认访问地址为:
http://<服务器IP>:9870
例如:http://192.168.223.181:9870/
在浏览器中访问该地址,可以查看集群状态、存储使用情况、节点信息等。
5. 创建 HDFS 目录结构
在 HDFS 上创建用户目录,为后续的 MapReduce 作业做准备:
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
6. 查看 HDFS Web 界面
成功启动后,可以通过 Web 界面查看 HDFS 状态:

7. 运行 MapReduce 作业
将本地文件上传到 HDFS,并运行 WordCount 示例程序:
创建输入目录并上传文件:
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir input
[hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input
验证文件上传成功:
[hadoop@server1 hadoop]$ bin/hdfs dfs -ls input
Found 10 items
-rw-r--r-- 1 hadoop supergroup 9213 2026-08-22 21:05 input/capacity-scheduler.xml
-rw-r--r-- 1 hadoop supergroup 884 2026-08-22 21:05 input/core-site.xml
-rw-r--r-- 1 hadoop supergroup 11765 2026-08-22 21:05 input/hadoop-policy.xml
-rw-r--r-- 1 hadoop supergroup 683 2026-08-22 21:05 input/hdfs-rbf-site.xml
-rw-r--r-- 1 hadoop supergroup 867 2026-08-22 21:05 input/hdfs-site.xml
-rw-r--r-- 1 hadoop supergroup 620 2026-08-22 21:05 input/httpfs-site.xml
-rw-r--r-- 1 hadoop supergroup 3518 2026-08-22 21:05 input/kms-acls.xml
-rw-r--r-- 1 hadoop supergroup 682 2026-08-22 21:05 input/kms-site.xml
-rw-r--r-- 1 hadoop supergroup 758 2026-08-22 21:05 input/mapred-site.xml
-rw-r--r-- 1 hadoop supergroup 690 2026-08-22 21:05 input/yarn-site.xml
运行 WordCount 作业:
[hadoop@server1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount input output
8. 查看作业结果
作业完成后,将输出文件从 HDFS 复制到本地文件系统并查看结果:
[hadoop@server1 hadoop]$ bin/hdfs dfs -get output output
[hadoop@server1 hadoop]$ cat output/part-r-00000 | head -20
输出结果将显示每个单词及其在输入文件中出现的次数。
9. 停止 HDFS 服务
完成测试后,停止 HDFS 服务:
[hadoop@server1 hadoop]$ sbin/stop-dfs.sh
Stopping namenodes on [localhost]
Stopping datanodes
Stopping secondary namenodes [server1]
验证服务已停止:
[hadoop@server1 hadoop]$ jps
6088 Jps
此时应该只看到 Jps 进程,HDFS 相关进程已全部停止。
总结:伪分布式模式是学习和测试 Hadoop 分布式功能的重要环节,它模拟了真实分布式环境的核心组件交互,为后续的完全分布式部署打下基础。通过本节的实践,您可以熟悉 HDFS 的基本操作、MapReduce 作业的提交流程,以及 Hadoop 集群的启停管理。
搭建 Hadoop 完全分布式集群(3 节点)
在完成伪分布式模式的实践后,我们可以进一步搭建一个真正的完全分布式 Hadoop 集群。本节将演示如何配置一个包含 3 个节点的 Hadoop 集群,其中 server1 作为主节点(NameNode),server2 和 server3 作为从节点(DataNode)。
1. 环境准备与 NFS 共享配置
首先,需要准备另外两台虚拟机(server2 和 server3),并在所有节点上禁用防火墙和 SELinux。然后,通过 NFS(Network File System)在主节点上共享 Hadoop 安装目录,以便从节点可以访问相同的软件环境。
在主节点(server1)上安装并配置 NFS 服务:
[root@server1 ~]# yum install -y nfs-utils
[root@server1 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server1 ~]# vim /etc/exports
添加以下内容
/home/hadoop *(rw,sync,anonuid=1000,anongid=1000)
[root@server1 ~]# systemctl start nfs
[root@server1 ~]# systemctl enable nfs
[root@server1 ~]# showmount -e
Export list for server1:
/home/hadoop *
在从节点(server2 和 server3)上安装 NFS 客户端并挂载共享目录:
# 在 server2 上执行
[root@server2 ~]# useradd hadoop
[root@server2 ~]# echo 001003 | passwd --stdin hadoop
[root@server2 ~]# yum install -y nfs-utils
[root@server2 ~]# showmount -e server1
Export list for server1:
/home/hadoop *
[root@server2 ~]# mount 192.168.223.181:/home/hadoop/ /home/hadoop/
[root@server2 ~]# df
Filesystem 1K-blocks Used Available Use% Mounted on
devtmpfs 1001960 0 1001960 0% /dev
tmpfs 1013948 0 1013948 0% /dev/shm
tmpfs 1013948 9644 1004304 1% /run
tmpfs 1013948 0 1013948 0% /sys/fs/cgroup
/dev/mapper/centos-root 49250820 1598964 47651856 4% /
/dev/sda1 1038336 140272 898064 14% /boot
tmpfs 202792 0 202792 0% /run/user/0
192.168.223.181:/home/hadoop 49251072 4272896 44978176 9% /home/hadoop
[root@server2 ~]# ll -d /home/hadoop/
drwx------ 6 hadoop hadoop 262 Aug 22 21:25 /home/hadoop/
[root@server2 ~]# id hadoop
uid=1000(hadoop) gid=1000(hadoop) groups=1000(hadoop)
[root@server2 ~]# su - hadoop
[hadoop@server2 ~]$ ls
hadoop hadoop-3.3.6 hadoop-3.3.6.tar.gz jdk jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz
在 server3 上重复相同的配置步骤。
2. 配置 SSH 免密登录
确保主节点可以无密码 SSH 连接到所有从节点:
[hadoop@server1 ~]$ ssh server2
[hadoop@server1 ~]$ ssh server3
3. 修改 Hadoop 配置文件
进入 Hadoop 配置目录,修改核心配置文件以适应分布式环境:
[hadoop@server1 ~]$ cd hadoop
[hadoop@server1 hadoop]$ cd etc/hadoop/
修改 core-site.xml:
[hadoop@server1 hadoop]$ vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://server1:9000</value>
</property>
</configuration>
修改 hdfs-site.xml:
[hadoop@server1 hadoop]$ vim hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
配置 workers 文件(指定从节点):
[hadoop@server1 hadoop]$ vim workers
server2
server3
4. 初始化并启动集群
重新格式化 NameNode(注意:这会清空 HDFS 上的所有数据):
[hadoop@server1 hadoop]$ bin/hdfs namenode -format
启动 HDFS 服务:
[hadoop@server1 hadoop]$ sbin/start-dfs.sh
Starting namenodes on [server1]
Starting datanodes
Starting secondary namenodes [server1]
验证各节点进程:
# 在主节点 server1 上查看
[hadoop@server1 hadoop]$ jps
6753 NameNode
6978 SecondaryNameNode
7099 Jps
在从节点 server2 上查看
[hadoop@server2 ~]$ jps
4025 DataNode
4095 Jps
在从节点 server3 上查看
[hadoop@server3 ~]$ jps
1557 DataNode
1626 Jps
可以看到,NameNode 和 SecondaryNameNode 运行在 server1 上,DataNode 运行在 server2 和 server3 上。

5. 测试集群功能
在 HDFS 上创建目录结构并上传测试文件:
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir /user/hadoop
[hadoop@server1 hadoop]$ bin/hdfs dfs -mkdir input
[hadoop@server1 hadoop]$ bin/hdfs dfs -put etc/hadoop/*.xml input


总结:至此,一个包含 3 个节点的 Hadoop 完全分布式集群已成功搭建。通过 NFS 共享软件目录简化了部署,配置文件指定了主从节点关系,HDFS 数据副本数设置为 2 以提高可靠性。您可以通过 Web 界面(http://server1:9870)监控集群状态,并运行 MapReduce 作业进行功能验证。
搭建计算资源调度
在完成 HDFS 分布式文件系统的部署后,接下来需要配置 YARN(Yet Another Resource Negotiator)资源管理器,以实现对集群计算资源的统一调度和管理。YARN 是 Hadoop 2.x 及更高版本引入的核心组件,负责管理集群中的计算资源,并为 MapReduce 等计算框架提供资源调度服务。
本节将在已搭建的完全分布式集群基础上,配置并启动 YARN 服务,使集群具备完整的计算资源调度能力。
1. 配置 MapReduce 运行框架
首先需要配置 MapReduce 以使用 YARN 作为资源调度框架。编辑 mapred-site.xml 配置文件:
[hadoop@server1 hadoop]$ vim etc/hadoop/mapred-site.xml
添加以下配置内容:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
关键配置说明:
mapreduce.framework.name:设置为yarn,表示使用 YARN 作为 MapReduce 作业的资源调度器
mapreduce.application.classpath:指定 MapReduce 应用程序的类路径,确保作业能够找到所需的依赖库
2. 配置 YARN 资源管理器
接下来配置 YARN 的核心参数。编辑 yarn-site.xml 配置文件:
[hadoop@server1 hadoop]$ vim etc/hadoop/yarn-site.xml
添加以下配置内容:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
关键配置说明:
yarn.nodemanager.aux-services:设置 NodeManager 的辅助服务为mapreduce_shuffle,这是 MapReduce 作业运行所必需的洗牌(shuffle)服务
yarn.nodemanager.env-whitelist:指定 NodeManager 可以传递给容器的环境变量白名单,确保容器能够访问必要的 Hadoop 环境变量
3. 启动 YARN 服务
配置完成后,在主节点(server1)上启动 YARN 服务:
[hadoop@server1 hadoop]$ sbin/start-yarn.sh
Starting resourcemanager
Starting nodemanagers
启动成功后,在各节点上使用 jps 命令验证服务状态:
# 在主节点 server1 上查看
[hadoop@server1 hadoop]$ jps
6753 NameNode
7553 ResourceManager
6978 SecondaryNameNode
7861 Jps
在从节点 server2 上查看
[hadoop@server2 ~]$ jps
4246 NodeManager
4343 Jps
4025 DataNode
在从节点 server3 上查看
[hadoop@server3 ~]$ jps
1780 NodeManager
1557 DataNode
1878 Jps
可以看到各节点上新增的 YARN 相关进程:
ResourceManager:运行在主节点 server1 上,负责整个集群的资源管理和调度
NodeManager:运行在所有从节点(server2 和 server3)上,负责单个节点上的资源管理和任务执行
在线扩容
在 Hadoop 集群运行过程中,随着业务增长,可能需要动态增加新的计算和存储节点。Hadoop 支持在线扩容,允许在不停止现有服务的情况下,将新节点加入集群。本节演示如何向已运行的完全分布式集群中添加第四个节点(server4)。
1. 新节点环境准备
在新节点 server4 上执行以下操作,确保其环境与集群其他节点一致:
# 安装 NFS 客户端工具
[root@server4 ~]# yum install -y nfs-utils
创建 hadoop 用户(需与集群其他节点保持相同 UID/GID)
[root@server4 ~]# useradd hadoop
设置 hadoop 用户密码(可选,用于 SSH 登录)
[root@server4 ~]# echo 001003 | passwd --stdin hadoop
挂载主节点共享的 Hadoop 安装目录
[root@server4 ~]# mount 192.168.223.181:/home/hadoop/ /home/hadoop/
切换到 hadoop 用户并验证挂载
[root@server4 ~]# su - hadoop
[hadoop@server4 ~]$ ls
hadoop hadoop-3.3.6 hadoop-3.3.6.tar.gz jdk jdk1.8.0_181 jdk-8u181-linux-x64.tar.gz
2. 配置文件调整
在主节点 server1 上,将新节点 server4 添加到 workers 配置文件中:
[hadoop@server1 hadoop]$ pwd
/home/hadoop/hadoop/etc/hadoop
[hadoop@server1 hadoop]$ vim workers
# 在文件中添加 server4
server2
server3
server4
注意:修改 workers 文件后,无需重启集群,HDFS 和 YARN 会自动识别新节点。
3. 启动新节点服务
在新节点 server4 上,分别启动 HDFS DataNode 和 YARN NodeManager 服务:
# 启动 HDFS DataNode 服务
[hadoop@server4 hadoop]$ bin/hdfs --daemon start datanode
启动 YARN NodeManager 服务
[hadoop@server4 hadoop]$ bin/yarn --daemon start nodemanager
验证服务进程
[hadoop@server4 hadoop]$ jps
1540 DataNode
1604 NodeManager
1654 Jps
4. 验证扩容成功
扩容完成后,可以通过以下方式验证新节点已成功加入集群:
HDFS Web 界面:访问
http://server1:9870,在 "Datanodes" 页面查看是否出现 server4 节点。YARN Web 界面:访问
http://server1:8088,在 "Nodes" 页面查看 NodeManager 节点列表。命令行验证:在主节点执行
hdfs dfsadmin -report查看 DataNode 状态。


总结:Hadoop 集群的在线扩容功能使得集群扩展变得灵活且无需停机。通过 NFS 共享软件目录、修改 workers 配置文件并启动新节点服务,即可将新节点无缝集成到现有集群中,实现存储和计算能力的线性扩展。
更多推荐

所有评论(0)