Hadoop - 多节点集群搭建部署教程
Hadoop - 多节点集群搭建部署教程
Hadoop是一个强大的分布式计算框架,用于处理大规模数据。本文以CentOS系统为例,演示如何在多节点集群上搭建和部署Hadoop。
1,架构说明
下面这张图显示了使用多节点安装Hadoop的架构图:
- NameNode、SecondaryNameNode、DataNode是HDFS服务的进程
- ResourceManager、NodeManager是YARN服务的进程
- MapRedcue在这里没有进程,因为它是一个计算框架,等Hadoop集群安装好了以后MapReduce程序可以在上面执行。
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远程登录从节点以启动从节点中的进程,所以需要配置主节点到所有从节点的免密码登录。如何进行配置免密码登录,具体可以参考我之前写的文章:
- 实现Linux主机节点之间SSH免密登录教程
注意:主节点在启动自身节点上的进程时也是通过SSH远程登录的,所以主节点也需要免密码登录自己。
(4)需要在集群中的所有节点上安装配置JDK,建议使用企业中常用的JDK 1.8版本,版本太高可能会有问题(比如ResourceManager、NodeManager无法启动)。关于JDK的安装可以参考我之前写的文章:
- Java - CentOS下JDK的安装教程(及JAVA_HOME配置、以jdk1.8为例)
3,下载并解压 Hadoop 安装包
(1)我们访问Hadoop的官网获取需要的版本安装包(点击访问),然后将其下载到node1服务器上:
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
(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格式化成功了。
9,启动集群
(1)我们在node1上hadoop目录下执行如下启动集群命令。
sbin/start-all.sh
(2)启动后控制台输出如下信息:
10,查看是否启动成功
(1)在node1节点执行jps命令,可以看到如下进程信息。
(2)在node2节点执行jps命令,可以看到如下进程信息。
(3)在node3节点执行jps命令,可以看到如下进程信息。至此,Hadoop分布式集群安装成功。
(4)使用浏览器访问yarn任务监控web页面,地址为http://主节点IP:8088,显示如下内容也可以说明启动成功。
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值:
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
(5)其中part-r-00000即为统计结果,我们查看该文件数据:
hdfs dfs -cat /output/part-r-00000