文章目录
- [1. 任务背景](#1. 任务背景)
- [2. 任务规划](#2. 任务规划)
- [3. 整体思路](#3. 整体思路)
- [4. 共性部分配置](#4. 共性部分配置)
-
- [4.1 关闭防火墙、关闭SELinux](#4.1 关闭防火墙、关闭SELinux)
- [4.2 配置hosts文件](#4.2 配置hosts文件)
- [4.3 配置网络参数](#4.3 配置网络参数)
- [4.4 安装配置JDK](#4.4 安装配置JDK)
- [4.5 安装配置Hadoop](#4.5 安装配置Hadoop)
-
- [4.5.1 下载Hadoop](#4.5.1 下载Hadoop)
- [4.5.2 解压](#4.5.2 解压)
- [4.5.3 配置环境变量](#4.5.3 配置环境变量)
- [4.5.4 修改hadoop中的JDK配置](#4.5.4 修改hadoop中的JDK配置)
- [4.5.5 修改hadoop的从节点配置](#4.5.5 修改hadoop的从节点配置)
- [4.5.6 修改core-site.xml核心配置](#4.5.6 修改core-site.xml核心配置)
- [4.5.7 修改hdfs-site.xml](#4.5.7 修改hdfs-site.xml)
- [4.5.8 修改`mapred-site.xml`MapReduce配置](#4.5.8 修改
mapred-site.xmlMapReduce配置) - [4.5.9 修改`yarn-site.xml`YARN配置](#4.5.9 修改
yarn-site.xmlYARN配置)
- [5. 克隆](#5. 克隆)
- [6. 个性配置](#6. 个性配置)
-
- [6.1 修改主机名](#6.1 修改主机名)
- [6.2 修改IP](#6.2 修改IP)
- [7. 配置免密登录](#7. 配置免密登录)
-
- [7.1 生成秘钥文件](#7.1 生成秘钥文件)
- [7.2 对其他节点生成秘钥](#7.2 对其他节点生成秘钥)
- [7.3 将所有秘钥汇总到第一个节点](#7.3 将所有秘钥汇总到第一个节点)
- [7.4 所有节点互相免密登录](#7.4 所有节点互相免密登录)
- [8. 格式化](#8. 格式化)
- [9. 启动集群](#9. 启动集群)
1. 任务背景
在之前的教程中,我们已经完成了Hadoop伪分布式搭建,对搭建过程有了一个比较具体的认知。
实际上在企业,还是需要搭建真正的多节点分布式集群,才能真正发挥Hadoop大数据处理能力。当然,具体需要多少个节点,还是由实际需求决定的。
本篇我们以四节点的集群搭建为例,展示完整操作过程。
2. 任务规划
参考上一篇的网络配置,我们规划四节点情况如下:
- 4节点集群,节点名称为:hadoop01、hadoop02、hadoop03 、hadoop04
- 集群所处网段:192.168.137.0
- 子网掩码:255.255.255.0
- 网关:192.168.137.2 (子网地址192.168.137.1,广播地址192.168.137.255这个根据计算网络原理定好的,不明白的可以去AI下计算机网络相关知识)
- hadoop01的IP:192.168.137.101
- hadoop02的IP:192.168.137.102
- hadoop03的IP:192.168.137.103
- hadoop04的IP:192.168.137.104
3. 整体思路
由于大数据环境搭建过程中,大部分配置信息是一样的,例如都要安装JDK、配置JDK环境变量、都要关闭防火墙、关闭SELinux等。
如果我们每台电脑逐一去配置这些共同项目,会浪费很多时间。
所以我们对共性项目,采取只配置hadoop01,其他节点直接克隆hadoop01的方式来实现。
而对于每个节点不同的配置信息,例如节点名称、IP等,我们在克隆之后再单独逐一配置。
下图展示了共性部分和个性部分:

4. 共性部分配置
首先我们使用VMWare安装第一个节点hadoop01,采用CentOS7操作系统,注意网络模式为NAT。然后按照以下步骤逐步操作即可:
4.1 关闭防火墙、关闭SELinux
执行如下命令,关闭防火墙并禁止开机启动。
shell
systemctl stop firewalld
systemctl disable firewalld
修改配置文件,禁用SELinux:
shell
vim /etc/sysconfig/selinux

4.2 配置hosts文件
执行vim /etc/hosts,根据规划,配置节点和IP映射如下:
shell
192.168.137.101 hadoop01
192.168.137.102 hadoop02
192.168.137.103 hadoop03
192.168.137.104 hadoop04
4.3 配置网络参数
通过ip a 查看网卡名称为ens33。
编辑网卡对应网络配置:
shell
vi /etc/sysconfig/network-scripts/ifcfg-ens33
内容修改如下:
shell
TYPE=Ethernet
BOOTPROTO=static
NAME=ens33
DEVICE=ens33
ONBOOT=yes
IPADDR=192.168.137.101
NETMASK=255.255.255.0
GATEWAY=192.168.137.2
DNS1=8.8.8.8
DNS2=114.114.114.114
需要注意,这是节点1的网络配置,克隆后其他节点配置还需要修改IP部分。
使用systemctl restart network重启网卡,使网络配置生效。
然后使用ping www.baidu.com测试网络是否已通。如下图有返回数据包即可

4.4 安装配置JDK
第一,下载JDK,由于网络已通,咱们直接使用命令下载即可。注意JDK只要是1.8版本即可。
shell
curl -O http://cdn.azul.com/zulu/bin/zulu8.84.0.15-ca-jdk8.0.442-linux_x64.tar.gz
第二,等待下载进度到100%:

第三,解压到/usr/local目录:
shell
tar -zxvf zulu8.84.0.15-ca-jdk8.0.442-linux_x64.tar.gz -C /usr/local/
第四,进入/usr/local目录后修改文件名便于配置:
shell
mv zulu8.84.0.15-ca-jdk8.0.442-linux_x64 jdk
第五,修改/etc/profile,设置环境变量
shell
vim /etc/profile
修改如下:
shell
export JAVA_HOME=/usr/local/jdk
export PATH=.:$JAVA_HOME/bin:$PATH

第六,使环境变量生效
shell
source /etc/profile
第七,验证JDK配置成功
shell
java -version
4.5 安装配置Hadoop
4.5.1 下载Hadoop
大家注意下载3.x版本即可,尽量保持跟我相同版本。
shell
curl -O http://repo.huaweicloud.com/apache/hadoop/common/hadoop-3.3.6/hadoop-3.3.6.tar.gz
如下图,等待进度100%:

4.5.2 解压
解压到指定目录:
shell
tar -zxvf hadoop-3.3.6.tar.gz -C /usr/local
然后进入/usr/local目录,重命名:
shell
mv hadoop-3.3.6 hadoop
4.5.3 配置环境变量
编辑全局环境变量文件,为Hadoop配置环境变量,让系统任意位置都可以直接调用 hadoop 命令。
shell
vim /etc/profile
在文件末尾增加:
shell
export HADOOP_HOME=/usr/local/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
注意Hadoop3.x还需要添加以下配置,否则可能报错:
shell
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root
保存退出,执行命令生效:
shell
source /etc/profile
执行 hadoop version,如果能输出版本号,代表环境变量配置成功。

4.5.4 修改hadoop中的JDK配置
hadoop配置文件,都在/usr/local/hadoop/etc/hadoop下,所以先进入该目录:
shell
cd /usr/local/hadoop/etc/hadoop
修改hadoop-3.3.6/etc/hadoop目录如下三个文件的JDK中JAVA_HOME的值:

找到 JAVA_HOME 配置项,修改成你的 JDK 实际安装目录:
shell
JAVA_HOME=/usr/local/jdk
4.5.5 修改hadoop的从节点配置
打开/usr/local/hadoop/etc/hadoop目录的workers文件,修改内容如下:
shell
hadoop02
hadoop03
hadoop04
这一步很关键,这是告诉hadoop,当前集群从节点数量及对应名称。
作用:启动 hdfs 时,脚本会自动在 workers 里面的机器启动 DataNode。
4.5.6 修改core-site.xml核心配置
注意,需要先创建一个临时目录:
shell
mkdir /usr/local/hadoop/tmp
xml
<configuration>
<!-- 默认文件系统URI -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hadoop.groups</name>
<value>*</value>
</property>
</configuration>
注意,此时不需要理解太多,复制到文件中即可。
4.5.7 修改hdfs-site.xml
xml
<configuration>
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop01:50070</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.stream-buffer-size</name>
<value>131072</value>
</property>
</configuration>
4.5.8 修改mapred-site.xmlMapReduce配置
xml
<configuration>
<!-- 指定MapReduce作业运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!-- 指定作业历史服务器的地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop01:10020</value>
</property>
<!-- 指定作业历史服务器的webapp地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop01:19888</value>
</property>
</configuration>
4.5.9 修改yarn-site.xmlYARN配置
xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop01</value>
<description>The hostname of the ResourceManager.</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandle</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop01:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resouce-tracker.address</name>
<value>hadoop01:8031</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop01:8032</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop01:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop01:8088</value>
</property>
</configuration>
至此,共性部分配置完成。
5. 克隆
将刚配置完的hadoop01节点关机。
通过VMWare菜单中的虚拟机--管理--克隆,分别克隆出hadoop02/hadoop03/hadoop04三个节点。

如下图:

6. 个性配置
接下对hadopp02/hadoop03/hadoop04节点个性部分进行配置:
6.1 修改主机名
通过vim /etc/hostname将3个节点的主机名修改为hadopp02/hadoop03/hadoop04。
6.2 修改IP
shell
vi /etc/sysconfig/network-scripts/ifcfg-ens33
将3个节点IP分别修改为
shell
IPADDR=192.168.137.102
IPADDR=192.168.137.103
IPADDR=192.168.137.104
全部修改完成后,使用'reboot`对3个节点重启。
7. 配置免密登录
Hadoop集群之间交互,如果每次登录非常麻烦,所以先实现基于SSH的免密码登录。
7.1 生成秘钥文件
使用root用户登录第一个节点hadoop01,运行如下命令:
shell
ssh-keygen -t rsa
后续出现的提示直接按回车:

然后注意生成的目录,id_rsa存放私钥,id_rsa.pub存放公钥。

运行如下命令,在.ssh目录生成authorized_keys文件:
shell
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
该文件即保存用户公钥。
7.2 对其他节点生成秘钥
第2步骤的操作,针对节点hadoop02/hadoop03/hadoop04重复执行一次。
shell
ssh-keygen -t rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
7.3 将所有秘钥汇总到第一个节点
通过ssh-copy-id命令,复制hadoop02/hadoop03/hadoop04节点的公钥到hadoop01节点,并验证是否成功:
登录hadoop02/hadoop03/hadoop04,执行如下命令:
shell
ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop01
命令执行如下图:

在hadoop02/hadoop03/hadoop04,执行如下命令,验证配置成功:
shell
ssh hadoop01
如下图,已经通过ssh登录hadoop01节点成功:

现在所有节点都可以免密登录到hadoop01了。
7.4 所有节点互相免密登录
登录hadoop01节点,将authorized_keys复制到hadoop02/hadoop03/hadoop04,即可实现互相免密:
shell
scp ~/.ssh/authorized_keys hadoop02:~/.ssh;
scp ~/.ssh/authorized_keys hadoop03:~/.ssh;
scp ~/.ssh/authorized_keys hadoop04:~/.ssh;
此时在任意一个节点,输入ssh+另一个节点名,即可免密登录到第一个节点。
例如从hadoop02到hadoop04:

8. 格式化
Hadoop文件系统使用前,需要先将节点格式化。
登录各个节点,执行如下命令,格式化NameNode:
shell
/usr/local/hadoop/./bin/hdfs namenode -format
出现如下提示,标识格式化成功:

9. 启动集群
通过start-all.sh启动集群,然后通过jps查看进程:

需要注意,按我们的设计,节点1需要具备NameNode+ResourceNanager+SecondaryNameNode,实验才算成功。
如果启动不全,可以查看日志:
