Hadoop - 多节点集群搭建部署教程
作者:hangge | 2024-06-26 08:31
Hadoop 是一个强大的分布式计算框架,用于处理大规模数据。本文以 CentOS 系统为例,演示如何在多节点集群上搭建和部署 Hadoop。
![](http://hangge.com/blog_uploads/202405/2024052717035027040.png)
(2)为方便后续 Kafka 集群的配置,我们在三台服务上均执行如下命令编辑的 host 文件,使得可以通过主机名相互访问:
(3)由于在启动 Hadoop 集群时,主节点需要通过 SSH 远程登录从节点以启动从节点中的进程,所以需要配置主节点到所有从节点的免密码登录。如何进行配置免密码登录,具体可以参考我之前写的文章:
(4)需要在集群中的所有节点上安装配置 JDK,建议使用企业中常用的 JDK 1.8 版本,版本太高可能会有问题(比如 ResourceManager、NodeManager 无法启动)。关于 JDK 的安装可以参考我之前写的文章:
(2)接着执行如下命令解压下载下来的压缩包:
(3)最后将解压出来的文件夹移动到合适的位置,这个可以根据个人习惯修改:
(2)在文件尾部添加如下内容:
(3)最后执行如下命令使配置生效:
(5)然后编辑 hdfs-site.xml 文件:
(6)接着编辑 mapred-site.xml 文件:
(7)然后编辑 yarn-site.xml 文件:
(8)最后编辑 workers 文件:
(2)然后编辑 start-dfs.sh 文件:![](http://hangge.com/blog_uploads/202401/202401031944463649.png)
(3)接着编辑 stop-dfs.sh 文件:
(4)然后编辑 start-yarn.sh 文件:
(5)接着编辑 stop-yarn.sh 文件:
(2)接着执行如下命令将 node1 上修改完配置的 Hadoop 安装包复制到 node3 上。
(2)如果在日志信息中能看到以下内容,则说明 NameNode 格式化成功了。
(2)启动后控制台输出如下信息:
![](http://hangge.com/blog_uploads/202401/2024010319573168057.png)
![](http://hangge.com/blog_uploads/202401/2024010413474564788.png)
(2)然后执行如下命令运行一个内置的计算 PI 样例程序:
(3)等待程序执行完毕后即可输出计算得到的 PI 值:
(2)然后将该目录下的 NOTICE.txt 文件上传到 Hadoop 的 HDFD 存储根目录下:
(3)然后执行如下命令运行一个内置的 MapReduce 单词统计程序,统计该文件中各个单词出现的次数,并将结果输出至 /output 目录:
(4)待程序执行完毕后,查看 hdfs 的 /output 目录产生的内容:
(5)其中 part-r-00000 即为统计结果,我们查看该文件数据:
1,架构说明
下面这张图显示了使用多节点安装 Hadoop 的架构图:
- NameNode、SecondaryNameNode、DataNode 是 HDFS 服务的进程
- ResourceManager、NodeManager 是 YARN 服务的进程
- MapRedcue 在这里没有进程,因为它是一个计算框架,等 Hadoop 集群安装好了以后 MapReduce 程序可以在上面执行。
![](http://hangge.com/blog_uploads/202405/2024052717035027040.png)
2,准备工作
(1)首先我们准备三台 linux 服务器进行集群搭建,具体信息如下:
主机名 | 内网IP | 外网IP |
node1 | 172.31.4.99 | 13.211.44.248 |
node2 | 172.31.3.72 | 3.106.170.197 |
node3 | 172.31.6.103 | 3.25.88.196 |
(2)为方便后续 Kafka 集群的配置,我们在三台服务上均执行如下命令编辑的 host 文件,使得可以通过主机名相互访问:
echo ' 172.31.4.99 node1 172.31.3.72 node2 172.31.6.103 node3' >> /etc/hosts
(3)由于在启动 Hadoop 集群时,主节点需要通过 SSH 远程登录从节点以启动从节点中的进程,所以需要配置主节点到所有从节点的免密码登录。如何进行配置免密码登录,具体可以参考我之前写的文章:
注意:主节点在启动自身节点上的进程时也是通过 SSH 远程登录的,所以主节点也需要免密码登录自己。
(4)需要在集群中的所有节点上安装配置 JDK,建议使用企业中常用的 JDK 1.8 版本,版本太高可能会有问题(比如 ResourceManager、NodeManager 无法启动)。关于 JDK 的安装可以参考我之前写的文章:
3,下载并解压 Hadoop 安装包
wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
(2)接着执行如下命令解压下载下来的压缩包:
tar -zxvf hadoop-3.3.6.tar.gz
(3)最后将解压出来的文件夹移动到合适的位置,这个可以根据个人习惯修改:
mv hadoop-3.3.6 /usr/local/hadoop
4,配置 HADOOP_HOME 环境变量
提示:Hadoop 目录下面有两个重要的目录:bin 目录和 sbin 目录。要操作 Hadoop,则需要用到这两个目录下的一些脚本。为了后期使用方便,建议配置 HADOOP_HOME 环境变量,并将 bin 目录和 sbin 目录添加到 PATH 环境变量中。
(1)首先执行如下命令编辑系统 profile 文件:
vi /etc/profile
(2)在文件尾部添加如下内容:
export HADOOP_HOME=/usr/local/hadoop export PATH=$HADOOP_HOME/sbin:$HADOOP_HOME/bin:$PATH
(3)最后执行如下命令使配置生效:
source /etc/profile
5,修改 Hadoop 的配置文件
(1)Hadoop 的相关配置文件都在 Hadoop 安装目录下的“etc/hadoop”目录下,主要修改以下配置文件。
- hadoop-env.sh:Hadoop 的环境变量配置文件。
- core-site.xml:Hadoop 的扩展配置文件。
- hdfs-site.xml:HDFS 的扩展配置文件。
- mapred-site.xml:MapReduce 的扩展配置文件。
- yarn-site.xml:YARN 的扩展配置文件。
- workers:从节点的配置文件。
(2)我们进入该目录:
cd /usr/local/hadoop/etc/hadoop
(3)首先编辑 hadoop-env.sh 文件:
vi hadoop-env.sh
- 增加 JAVA_HOME 和 HADOOP_LOG_DIR 环境变量,添加到 hadoop-env.sh 文件的末尾。
export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.392.b08-3.el9.x86_64 export HADOOP_LOG_DIR=/data/hadoop_repo/logs/hadoop
(4)接着编辑 core-site.xml 文件:
vi core-site.xml
- 添加如下高亮内容,注意主节点 node1 名称根据实际情况修改:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://node1:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_repo</value> </property> </configuration>
(5)然后编辑 hdfs-site.xml 文件:
vi hdfs-site.xml
- 添加如下高亮内容,注意主节点 node1 名称根据实际情况修改:
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>node1:50090</value> </property> </configuration>
(6)接着编辑 mapred-site.xml 文件:
vi mapred-site.xml
- 添加如下高亮内容:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
(7)然后编辑 yarn-site.xml 文件:
vi yarn-site.xml
- 添加如下高亮内容,注意主节点 node1 名称根据实际情况修改:
<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_MAPRED_HOME</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>node1</value> </property> </configuration>
(8)最后编辑 workers 文件:
vi workers
- 添加另外两个节点的名称:
node2 node3
6,修改 Hadoop 启动脚本
(1)进入 Hadoop 安装目录下 sbin 目录:
cd /usr/local/hadoop/sbin
(2)然后编辑 start-dfs.sh 文件:
vi start-dfs.sh
- 在第二行添加如下内容:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
![](http://hangge.com/blog_uploads/202401/202401031944463649.png)
(3)接着编辑 stop-dfs.sh 文件:
vi stop-dfs.sh
- 在第二行添加如下内容:
HDFS_DATANODE_USER=root HDFS_DATANODE_SECURE_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
(4)然后编辑 start-yarn.sh 文件:
vi start-yarn.sh
- 在第二行添加如下内容:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
(5)接着编辑 stop-yarn.sh 文件:
vi stop-yarn.sh
- 在第二行添加如下内容:
YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root
7,其他节点的配置
(1)执行如下命令将 node1 上修改完配置的 Hadoop 安装包复制到 node2 上。
scp -rq /usr/local/hadoop node2:/usr/local/
(2)接着执行如下命令将 node1 上修改完配置的 Hadoop 安装包复制到 node3 上。
scp -rq /usr/local/hadoop node3:/usr/local/
8,格式化 NameNode
(1)我们在 node1 上执行如下命令格式化 NameNode:
注意:格式化操作只需要在新安装 Hadoop 集群时执行 1 次即可,不能重复执行。如果要重复执行,则需要先清空集群所有节点中 hadoop.tmp.dir 属性对应的目录。
cd /usr/local/hadoop bin/hdfs namenode -format
(2)如果在日志信息中能看到以下内容,则说明 NameNode 格式化成功了。
![](http://hangge.com/blog_uploads/202401/202401031955184486.png)
9,启动集群
(1)我们在 node1 上 hadoop 目录下执行如下启动集群命令。
sbin/start-all.sh
![](http://hangge.com/blog_uploads/202401/2024010319573168057.png)
10,查看是否启动成功
(1)在 node1 节点执行 jps 命令,可以看到如下进程信息。
![](http://hangge.com/blog_uploads/202401/2024010412263923514.png)
(2)在 node2 节点执行 jps 命令,可以看到如下进程信息。
![](http://hangge.com/blog_uploads/202401/2024010412221210991.png)
(3)在 node3 节点执行 jps 命令,可以看到如下进程信息。至此,Hadoop 分布式集群安装成功。
![](http://hangge.com/blog_uploads/202401/2024010412241571773.png)
(4)使用浏览器访问 yarn 任务监控 web 页面,地址为 http://主节点IP:8088,显示如下内容也可以说明启动成功。
![](http://hangge.com/blog_uploads/202401/2024010413474564788.png)
11,停止集群
如果要停止集群,则需要在 node1 上执行 stop-all.sh 文件。
cd /usr/local/hadoop sbin/stop-all.sh
附:内置 mapreduce 样例使用测试
1,计算 PI
(1)首先进入 hadoop 目录:
cd /usr/local/hadoop
(2)然后执行如下命令运行一个内置的计算 PI 样例程序:
./bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar pi 10 10
(3)等待程序执行完毕后即可输出计算得到的 PI 值:
![](http://hangge.com/blog_uploads/202401/202401042037453383.png)
2,单词统计
(1)首先进入 hadoop 目录:
cd /usr/local/hadoop
(2)然后将该目录下的 NOTICE.txt 文件上传到 Hadoop 的 HDFD 存储根目录下:
hdfs dfs -put NOTICE.txt /
(3)然后执行如下命令运行一个内置的 MapReduce 单词统计程序,统计该文件中各个单词出现的次数,并将结果输出至 /output 目录:
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.6.jar wordcount /NOTICE.txt /output
(4)待程序执行完毕后,查看 hdfs 的 /output 目录产生的内容:
hdfs dfs -ls /output
![](http://hangge.com/blog_uploads/202401/2024010420470042953.png)
hdfs dfs -cat /output/part-r-00000
![](http://hangge.com/blog_uploads/202401/2024010420482841959.png)
全部评论(0)