# Linux-CentOS 7+Xshell 7
**Repository Path**: androidwhm/linux-cent-os-7--xshell-7
## Basic Information
- **Project Name**: Linux-CentOS 7+Xshell 7
- **Description**: Linux操作系统的安装与基础配置(CentOS 7+Xshell 7)
- **Primary Language**: Unknown
- **License**: Not specified
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 1
- **Created**: 2025-02-10
- **Last Updated**: 2025-02-10
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# Linux-CentOS 7+Xshell 7
#### 介绍
Linux操作系统的安装与基础配置(CentOS 7+Xshell 7)
#### 安装教程
##### 一、CentOS下载
官网地址:https://vault.centos.org/
1.进入官网,找到CentOS 7.4版本

2.在CentOS 7.4中找到 isos

3.在 isos 中选择 x86_64

4.选择 CentOS-7-x86_64-DVD-1708.iso 进行下载

##### 二、下载 Xshell 7
官网地址:https://www.xshell.com/zh/free-for-home-school/
进入 XShell 官网,填写姓名和邮箱即可获取下载地址,安装到电脑即可。
##### 三、CentOS 7.4 的使用
1.打开你的 VMware ,并点击创建虚拟机。

2.选择经典版本,点击下一步

3.选择稍后安装操作系统,点击下一步

4.选择 Linux,并选择与之前下载的CentOS 7 一致的版本,点击下一步

5.修改虚拟机的名称和安装路径(按需修改,避免 C 盘爆红),点击下一步

6.磁盘选择默认的 20 GB,点击虚拟磁盘为单个文件,点击下一步

7.点击完成

8.点击“编辑虚拟机设置”

9.点击CD/DVD,点击“使用ISO影像文件”,选择我们下载好的CentOS 7的DVD的iso文件

10.点击网络适配器,点击“自定义:特定虚拟网络”,选择 VMnet8(NAT模式)

11.点击USB控制器,点击移除

12.点击声卡,点击移除

13.点击打印机,点击移除

14.最后,点击“确定”保存

15.点击“开启虚拟机”

16.选择第一个,选中时字体变白,按下“回车键”,等待。(注意:需将鼠标放入黑屏单击后进入虚拟机,按“Ctrl + Alt”退出虚拟机)

17.默认安装是英文,下滑有中文选择,选好后点击 Continue 。

18.编辑时间

19.编辑时间与电脑时间一致,点击完成

20.点击软件选择,勾选如下选项,点击完成

21.点击安装位置

22.点击我要配置分区,点击完成

23.选择标准分区,然后添加区域

24.按如下“三张图”添加“三个区域”



25.检查分配好后,点击完成

26.点击接受更改,完成配置

27.点击“安装”

28.设置 ROOT 密码,完成后等待安装(时间较长),安装后点击“重启”

##### 四、虚拟机网络配置
1.查看虚拟机网络,点击“虚拟网络编辑器”

2.选择 VM8 查看 NAT设置。

3.记住 NAT设置 的“子网掩码”和“网关”

4.点击电脑设置,找到网络设置,点击高级网络设置。

5.选择 VM8 点击“编辑”

6.选择 IPv4 进行属性编辑

7.“子网掩码”和“网关”为刚才记录的 NAT设置 中的“子网掩码”和“网关”,IP地址 将网关最后的2改为其它数字(例如:网关:192.168.124.2,则IP地址改为:192.168.124.101)

8.返回 VMware 软件,点击开启虚拟机,选择进入第一个系统,等待一会

9.输入“用户”和“密码”

10.配置虚拟机网络
(1)进入到 network-scripts 目录下,把 ifcfg-ens32 重命名为 ifcfg-eth0
```
cd /etc/sysconfig/network-scripts/ //进入到 network-scripts 目录下
```
```
mv ifcfg-ens32 ifcfg-eth0 //重命名
```
(2)编辑 ifcfg-eth0 网络配置文件
```
vi ifcfg-eth0 //修改网络配置文件
```
可以看到如下代码

按 i 键进行编辑,编辑成如下图所示,其中 NETMASK 是你的 NAT设置 中的“子网掩码”,GATEWAY 是你的NAT设置 中的“网关”,IPADDR 是你虚拟机的 IP地址 将网关最后的2改为其它数字,但不可与电脑网络配置中的一样(例如:网关:192.168.124.2,电脑配置的IP地址改为:192.168.124.101,则虚拟机的 IP地址 可配置:192.168.121.102)

配置完成后,按 SEC键 后输入 :wq! 保存设置。
11.重启网络服务
```
service network restart //重启网络服务
```

12.设置 DNS 地址
```
vi /etc/resolv.conf //编辑DNS地址,初始是空的
```
添加如下图代码
```
nameserver 114.114.114.114
```
```
nameserver 8.8.8.8
```

13.关闭防火墙,保证能外联
```
systemctl stop firewalld.service //关闭防火墙
```
```
systemctl disable firewalld.service //虚拟机开机不启用防火墙
```
```
iptables -L
```
得到如下图代表完成

14.永久关闭SELinux防火墙
```
vi /etc/sysconfig/selinux
```
将如下图位置更改为:SELINUX=disabled

输入:halt 关闭虚拟机
在 VMware 上方状态栏重启虚拟机,并登录
输入:sestatus 查看SELinux防火墙状态如下图

15.设置权限
```
chmod +x /etc/rc.d/rc.local //设置权限
```
```
cd /etc/rc.d //进入文件
```
```
ll //查看设置,如下图即为完成
```

###### 16.连接 Xshell 7
(1)在 VMware 上方状态栏重启虚拟机,不用登录,到如下界面即可

(2)打开 Xshell 7 选择新建






出现如下界面说明连接成功

(3)查看是否可以上网
```
ping www.baidu.com //出现如下界面说明可以,此时按 Ctrl+C 取消连接
```

到此,你已经安装好了虚拟机。
##### 五、Linux虚拟环境安装软件
1.由于 CentOS 镜像已经停止服务,我们需要更换镜像(这里选择阿里云镜像)
(1)删除原 yum 源
```
cd /etc/yum.repos.d
```
```
rm -rf /etc/yum.repos.d/*
```

(2)下载阿里云的 yum 源
```
curl -o /etc/yum.repos.d/CentOS-Base.repo https://mirrors.aliyun.com/repo/Centos-7.repo
```

(3)清除旧 yum 缓存,缓存阿里云镜像,缓存有点慢,请耐心等待
```
yum clean all
```

```
yum makecache
```

(4)查看 yum 源信息
```
yum repolist
```

2.下载基础工具包
```
sudo yum install -y epel-release
```
```
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static
```
3.在 /opt目录下创建 module、software 文件夹
```
sudo mkdir /opt/module /opt/software
```

4.备份当前虚拟机,避免后续崩溃

###### 5.安装 JDK
(1)卸载可能原有的 JDK
```
rpm -qa | grep -i java | xargs -n1 sudo rpm -e --nodeps
```
如下图是没有自带 JDK,有 JDK 的界面会有不同

(2)进入 software 文件夹,导入包
```
cd /opt/software/
```
```
rz
```

弹出与 win 相同的导入界面,找到自己的 JDK 的 gz 包

第一次导入会出现乱码,不要慌,这是正常情况,按 Ctrl+C 后重新执行 rz 指令

直到没有乱码弹出,查看是否导入成功
```
ls /opt/software/
```

(3)解压包,将 jdk-8u212-linux-x64.tar.gz 解压到 module 文件( JDK 版本和你自己的一致)
```
tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/
```
(4)配置 JDK 环境变量
```
sudo vim /etc/profile.d/my_env.sh
```
在空白中添加如下变量
```
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin
```

添加后,按 SEC键 后输入 :wq! 保存设置。
输入 halt 退出,在 VMware 中重启虚拟机
(5)检查是否安装成功
```
java -version
```

###### 6.安装Hadoop
CentOS不会自带Hadoop,所以没有删除操作。导入操作与 JDK 一致。
(1)解压包( Hadoop 版本和你自己的一致)
```
tar -zxvf hadoop-3.1.3.tar.gz -C /opt/module/
```
(2)配置 Hadoop 环境变量
```
sudo vi /etc/profile
```
在 profile 的末尾添加环境变量
```
#HADOOP_HOME
```
```
export HADOOP_HOME=/opt/module/hadoop-3.1.3
```
```
export PATH=$PATH:$HADOOP_HOME/bin
```
```
export PATH=$PATH:$HADOOP_HOME/sbin
```

添加后,按 SEC键 后输入 :wq! 保存设置。
(3)使修改文件生效
```
source /etc/profile
```
(4)检查是否安装成功
```
hadoop version
```
输入:halt 关闭虚拟机
保存虚拟机当前状态

##### 六、完全分布式运行模式搭建
###### 1.集群虚拟机准备
(1)打开虚拟机,并修改主机名称为hadoop101(建议以主机 IP 后三位为编码,方便记忆与使用)
```
sudo hostnamectl --static set-hostname hadoop113
```
(2)配置集群中的虚拟机 IP 与名称
```
sudo vim /etc/hosts
```
输入 IP 与名称,如下

保存好后,修改 hosts 文件,操作如下。
在 Windows 中找到 hosts 文件





用记事本打开 hosts 文件,进行编辑

在 hosts 文件中添加虚拟机 IP 与名称

另存在桌面为 hosts.txt 文件,将后缀 .txt 删除后,拖入原来的目录将其替换。
(3)创建 atguigu 用户
```
sudo useradd atguigu
sudo passwd atguigu
```
输入密码后,即为创建成功

(4)配置 atguigu 用户权限
重启虚拟机,使得用户生效
```
reboot
```
给予 atguigu 用户 root 权限
```
visudo
```
在 sudo 文件中添加,如下图所示
```
atguigu ALL=(ALL) ALL
```

输入 :wq! 保存。
###### 2.克隆虚拟机




###### 注意事项
需要保证克隆的虚拟机与其他虚拟机不在同一目录下才能同时开多台虚拟机。在“映像”所在目录下新建一个小目录。

我的“映像”在虚拟机目录下,则在该目录下新建一个小目录。

###### 3.修改克隆虚拟机的 IP 与名称
打开克隆好的虚拟机,输入以下代码
```
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
```
将 IP 地址修改为之前 hosts 文件中的 IP 地址。

修改名称为之前 hosts 文件中的名称。(如:我在 hosts 文件中的第二个名称为 hadoop201)
```
sudo hostnamectl --static set-hostname hadoop201
```
###### 4.编写集群分发脚本 xsync
在/home/atguigu目录下创建 xsync 文件(不同人之前创建的用户可能不同,如我的是 jyx )
```
cd /home/atguigu
```
```
vim xsync
```
在 xsync 文件中编入以下代码(注意:第六行 host 名称填自己的)
```
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
for host in hadoop201 hadoop202 hadoop113
do
echo ==================== $host ====================
for file in $@
do
if [ -e $file ]
then
pdir=$(cd -P $(dirname $file); pwd)
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
```
修改 xsync 执行权限
```
chmod +x xsync
```
将 xsync 文件移动到 bin 文件下,便于全局调用
```
sudo mv xsync /bin/
```
测试 xsync 文件能否执行。
打开集群中的所有虚拟机,在已经有 xsync 文件的虚拟机中输入以下代码
```
sudo xsync /bin/xsync
```
会弹出输入其余虚拟机密码,密码要输入两次,得到如下图则为完成。

###### 5.集群配置
(1)用户准备
打开所有克隆机,都输入(注意:有些人之前创建的用户可能不是 atguigu ,需要输入自己创建的用户,或者再创建一个atguigu用户,并给予所有权限。)
```
sudo chown atguigu:atguigu /opt/module /opt/software
```
集群配置规划如下图:

(1)核心配置文件(在主机上配置)
进入hadoop文件
```
cd $HADOOP_HOME/etc/hadoop
```
配置 core-site.xml文件
```
vim core-site.xml
```
在文件中输入如下内容,注意文件头的配置与代码一致、主机名填自己的、用户名填自己的

```
```
```
fs.defaultFS
hdfs://hadoop113:8020
hadoop.data.dir
/opt/module/hadoop-3.1.3/data
hadoop.proxyuser.jyx.hosts
*
hadoop.proxyuser.jyx.groups
*
```
检查编辑好后,保存退出,使用 cat 命令查看
(2)配置 HDFS 文件(在主机上配置)
进入hadoop文件
```
cd $HADOOP_HOME/etc/hadoop
```
配置 hdfs-site.xml 文件
```
vim hdfs-site.xml
```
在文件中输入如下内容,注意文件头的配置与代码一致、红框内的主机名填自己的第二台克隆机名称

```
```
```
dfs.namenode.name.dir
file://${hadoop.data.dir}/name
dfs.datanode.data.dir
file://${hadoop.data.dir}/data
dfs.namenode.checkpoint.dir
file://${hadoop.data.dir}/namesecondary
dfs.client.datanode-restart.timeout
30
dfs.namenode.secondary.http-address
hadoop202:9868
```
检查编辑好后,保存退出,使用 cat 命令查看
(3)配置 YARN 文件(在主机上配置)
进入hadoop文件
```
cd $HADOOP_HOME/etc/hadoop
```
配置 yarn-site.xml 文件
```
vim yarn-site.xml
```
在文件中输入如下内容,注意文件头的配置与代码一致、红框内的主机名填自己的第一台克隆机名称

```
```
```
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop201
yarn.nodemanager.env-whitelist
JAVA_HOME,
HADOOP_COMMON_HOME,
HADOOP_HDFS_HOME,
HADOOP_CONF_DIR,
CLASSPATH_PREPEND_DISTCACHE,
HADOOP_YARN_HOME,
HADOOP_MAPRED_HOME
```
检查编辑好后,保存退出,使用 cat 命令查看
(4)配置 MapReduce 文件(在主机上配置)
进入hadoop文件
```
cd $HADOOP_HOME/etc/hadoop
```
配置 mapred-site.xml 文件
```
vim mapred-site.xml
```
在文件中输入如下代码
```
mapreduce.framework.name
yarn
```
检查编辑好后,保存退出,使用 cat 命令查看
(5)确定以上文件配置正确后,在集群上分发 Hadoop 配置文件,出现如下图为分发成功。
```
xsync /opt/module/hadoop-3.1.3/etc/hadoop/
```

###### 6.集群单点启动
(1)打开主机,格式化 NameNode 文件
```
hdfs namenode -format
```
(2)在主机上重新启动 NameNode 文件
```
hdfs --daemon start namenode
```
完成后输入 jps 查看进程,如下图(每个机子进程号不同,不用在意。)

(3)在所有机子上都执行如下指令(第一次会显示未找到 datanode ,不用管,再次输入一次就好了)
```
hdfs --daemon start datanode
```
###### 7.配置 SSH 无密码登录
打开主机,输入下面代码,生成公钥与私钥文件
```
ssh-keygen -t rsa
```
输入后,按三次回车,得到如下图则为完成。

将公钥拷贝到免密登录的机器上。(你自己集群中所有机子的名称)
```
ssh-copy-id hadoop113
```
```
ssh-copy-id hadoop201
```
```
ssh-copy-id hadoop202
```

上面的操作完成了在主机上使用 root 用户对其他克隆机免密登录。
接下来要进行集群用户的免密登录。
###### 注意集群中所有机子都需要进行一次以下代码
登录用户 atguigu(登录自己的用户,例如我的是:jyx)
```
su - jyx
```
生成密钥(输入代码后按三次回车,得到下图为完成)
```
ssh-keygen -t rsa
```

分发密钥(需要输入对应分发机子上的 atguigu 用户密码,机子名称为你们自己的机子)
```
ssh-copy-id hadoop113
```
```
ssh-copy-id hadoop201
```
```
ssh-copy-id hadoop202
```

分发密钥后,返回 root 用户,赋予 jyx 用户权限
```
su - root
```
```
sudo chown -R jyx:jyx /opt/module /opt/software
```
完成后将所有机子重启。
###### 8.群起集群
开启集群中所有机子
(1)打开主机配置 workers 文件
```
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
```
在文件中添加自己集群的所有机子名称(如下图)
```
hadoop113
hadoop201
hadoop202
```

分发文件
```
xsync /opt/module/hadoop-3.1.3/etc
```

修改显示文件
```
cd $HADOOP_HOME/share/hadoop/hdfs/webapps/static
vim dfs-dust.js
```
找到 61 行如下

将返回值修改为如下
```
return new Date(Number(v)).toLocaleString();
```

分发 dfs-dust.js 文件
```
xsync $HADOOP_HOME/share/hadoop/hdfs/webapps/static/dfs-dust.js
```
(2)启动集群
因为之前单点启动过,所以需要清理所有机子上的 data 和 logs 文件
打开所有机子都输入下面的代码(会弹出询问,输入 yes+回车,直至询问结束,一定要删干净!!!)
```
rm -r /opt/module/hadoop-3.1.3/logs
rm -r /opt/module/hadoop-3.1.3/data
```
在主机切换到 atguigu 用户(我的是 jyx )
```
su - jyx
```
在主机格式化 NameNode 文件
```
hdfs namenode -format
```
启动 HDFS (localhost会显示无法获取······,不用管再输入一次,得到如下图则为完成)
```
start-dfs.sh
```

打开配置了 ResourceManager 文件的机子(hadoop103,我的是hadoop201)输入以下代码
```
su - jyx
start-yarn.sh
```

查看 yarn 的启动情况,如下图则为成功,记住图中黄色框中的地址,方便以后查看虚拟机状态
```
yarn node -list
```

在浏览器中查看 SecondaryNameNode,在浏览器中输入以下网址(输入有 SecondaryNameNode 的机子,在执行 start-dfs.sh 代码的响应中可以找到,例如我的是 hadoop202 )
```
http://hadoop202:9868/status.html
```
可以看到如下图(如果不是如下图,而是显示 hadoop,2019,可清理浏览器缓存再输入网址查看。)

完成后关闭所有虚拟机,并保存快照。
###### 9.配置历史服务器和日志的聚集
打开所有集群中的虚拟机
(1)在主机上配置历史服务器
登录 atguigu 用户(我的是 jyx )
```
su - jyx
```
配置 mapred-site.xml 文件
```
cd $HADOOP_HOME/etc/hadoop
```
```
vi mapred-site.xml
```
将下面代码加入 configuration 中( hadoop 位置填自己主机),如下图
```
mapreduce.jobhistory.address
hadoop113:10020
mapreduce.jobhistory.webapp.address
hadoop113:19888
```

分发配置好的 mapred-site.xml 文件
```
xsync $HADOOP_HOME/etc/hadoop/mapred-site.xml
```
(2)在主机上配置日志的聚集
配置 yarn-site.xml 文件
```
vim yarn-site.xml
```
在 yarn-site.xml 文件中添加如下代码( hadoop 位置填自己主机),如下图
```
yarn.log-aggregation-enable
true
yarn.log.server.url
http://hadoop113:19888/jobhistory/logs
yarn.log-aggregation.retain-seconds
604800
```

分发配置好的文件
```
xsync $HADOOP_HOME/etc/hadoop/yarn-site.xml
```
(3)启动集群,查看 jobhistory 网页
在主机登录 atguigu 用户启动集群
```
su - atguigu
```
```
start-dfs.sh
```
在 hadoop103 (配置了 ResourceManager 文件的机子)启动 yarn 文件
```
su - atguigu
start-yarn.sh
```
在主机启动历史服务器
```
mapred --daemon start historyserver
```
输入 jps 查看进程如下

查看 jobhistory 网页,在浏览器中输入 http://主机:19888/jobhistory
```
http://hadoop113:19888/jobhistory
```

###### 10.集群时间同步(以下代码都在 root 用户运行)
(1)关闭集群中所有机子的 ntpd 服务(集群中每台机子都要运行以下代码)
```
systemctl stop ntpd
systemctl disable ntpd
```
(2)设置主机时间与电脑时间同步
修改主机中的 ntp.conf 文件,如下图
```
vim /etc/ntp.conf
```

在 ntp.conf 文件的最后添加以下代码
```
server 127.127.1.0
fudge 127.127.1.0
stratum 10
```

修改主机中的 ntpd 文件
```
vim /etc/sysconfig/ntpd
```
在文件中添加以下代码
```
SYNC_HWCLOCR=yes
```
重启主机的 ntpd 服务
```
systemctl start ntpd
systemctl enable ntpd
```

(3)非主机配置(除主机外,所有机子都需要运行以下代码)
修改时间同步配置
```
crontab -e
```
添加以下代码(每一分钟与主机时间同步一次)
```
*/1 * * * * /usr/sbin/ntpdate hadoop113
```
(4)测试
在非主机上修改时间
```
date -s "2014-10-20 12:00:00"
```
等待一分钟后输入以下代码查看时间变化如下图
```
date
```

###### 11.Hadoop 编译源码(集群中所有机子都需要安装)
Maven 下载地址:https://dlcdn.apache.org/maven/
Ant 下载地址:https://archive.apache.org/dist/ant/binaries/
(1)Maven 安装与配置
导入压缩包
```
cd /opt/software/
rz
```
解压(这里下载的是 apache-maven-3.9.6-bin.tar.gz )
```
tar -zxvf apache-maven-3.9.6-bin.tar.gz -C /opt/module/
```
配置 settings.xml 文件
```
cd /opt/module/apache-maven-3.9.6
vi conf/settings.xml
```
下滑找到如图所示位置更改文件中的代码

```
nexus-aliyun
central
Nexus aliyun
http://maven.aliyun.com/nexus/content/groups/public
```
配置 Maven 环境变量
```
vi /etc/profile
```
在最下面添加以下代码
```
#MAVEN_HOME
export MAVEN_HOME=/opt/module/apache-maven-3.9.6
export PATH=$PATH:$MAVEN_HOME/bin
```

重启环境变量文件
```
source /etc/profile
```
查看是否安装与配置成功
```
mvn -version
```

(2)Ant 安装与配置
导入压缩包
```
cd /opt/software/
rz
```
解压(这里下载的是 apache-ant-1.10.0-bin.tar.gz )
```
tar -zxvf apache-ant-1.10.0-bin.tar.gz -C /opt/module/
```
配置 Ant 环境变量
```
cd /opt/module/apache-ant-1.10.0
vi /etc/profile
```
在最下面添加以下代码
```
#ANT_HOME
export ANT_HOME=/opt/module/apache-ant-1.10.0
export PATH=$PATH:$ANT_HOME/bin
```

重启环境变量文件
```
source /etc/profile
```
查看是否安装与配置成功
```
ant -version
```

(3)Protobuf 安装与配置
工具准备
```
yum install glibc-headers
```
```
yum install gcc-c++
```
```
yum install make
```
```
yum install cmake
```
##### 七、服役新节点和退役旧节点
###### 1.克隆新机子
克隆 104 号机子,得到 105 号机子( 104 号机子为原集群中非 hdfs 与 yarn 启动机)
修改 105 号机子的IP地址
```
sudo vim /etc/sysconfig/network-scripts/ifcfg-eth0
```
修改 105 号机子的名称
```
sudo hostnamectl --static set-hostname hadoop203
```
###### 2.修改集群文件(在主机上操作)
(1)修改 hosts 文件,在 hosts 中添加新的机子(注意:win 中的 hosts 文件也要一并修改)
```
vim /etc/hosts
```

(2)修改 xsync 文件,在 xsync 中添加新的机子
```
sudo vim /bin/xsync
```

分发 xsync 文件
```
sudo xsync /bin/xsync
```

分发 hosts 文件
```
sudo xsync /etc/hosts
```
(3)修改 workers 文件,注意:原本 workers 文件中有 3 台机子,即集群有 3 个副本,添加新机子后集群中有 4 台机子,即 4 个副本,在后续的黑名单退役时,105 号机子无法退役(黑名单退役需满足:集群中的机子数量大于副本数量),如果需要立即退役:1.修改 workers 文件后 105 号机子采用白名单退役;2.不修改 workers 文件 105 号机子采用单点启动。
```
vim /opt/module/hadoop-3.1.3/etc/hadoop/workers
```

分发 workers 文件
```
xsync /opt/module/hadoop-3.1.3/etc
```
###### 3.设置 105 号机子在集群中的无密
(1)在主机上分发 root 密钥(主机:102)
```
ssh-copy-id hadoop203
```
(2)分发原本集群上 atguigu 用户密钥(102号机子、103号机子、104号机子)
```
su - jyx
ssh-copy-id hadoop203
```
(3)分发 105 号机子 atguigu 用户的密钥
生成密钥
```
su - jyx
ssh-keygen -t rsa
```

分发密钥
```
ssh-copy-id hadoop113
```
```
ssh-copy-id hadoop201
```
```
ssh-copy-id hadoop202
```
```
ssh-copy-id hadoop203
```
###### 4.启动集群
(1)删除 105 号机子上克隆的 data 和 logs 文件
```
rm -rf /opt/module/hadoop-3.1.3/logs
```
```
rm -rf /opt/module/hadoop-3.1.3/data
```
(2)重启 105 号机子的环境变量
```
source /etc/profile
```
(3)启动集群
在主机上启动 HDFS (主机:102)
```
start-dfs.sh
```

在配置 YARN 文件的机子上启动 YARN 服务(103号机子)
```
start-yarn.sh
```
在主机上查看集群状态,得到如下两图则为完成。
```
hadoop dfsadmin -report
```


关闭虚拟机,并保存快照
###### 5.黑名单退役旧节点
(1)在主机上使用 atguigu 用户进入 hadoop 文件,并创建黑名单文件
```
su - jyx
cd $HADOOP_HOME/etc/hadoop
touch dfs.hosts.exclude
```
(2)将 105 号机子加入黑名单
```
vim dfs.hosts.exclude
```
(3)修改 hdfs-site.xml 文件使黑名单生效
```
vim hdfs-site.xml
```
在文件中加入以下代码
```
dfs.hosts.exclude
/opt/module/hadoop-3.1.3/etc/hadoop/dfs.hosts.exclude
```

分发修改后的 hdfs-site.xml 文件
```
xsync hdfs-site.xml
```
关闭虚拟机,并保存快照
##### 八、配置 Zookeeper 集群
Zookeeper官网下载地址:https://zookeeper.apache.org/
###### 1.在集群中安装 Zookeeper
在主机使用 atguigu 用户导入安装包(主机:102,如果第一次导入出现乱码,重新导入即可)
```
su - jyx
cd /opt/software
rz
```
###### 2.配置 Zookeeper 集群
(1)解压安装包到 module 文件夹,并在 Zookeeper 下创建 zkData 文件
```
tar -zxvf apache-zookeeper-3.8.4-bin.tar.gz -C /opt/module/
```
```
cd /opt/module/apache-zookeeper-3.8.4-bin/
```
```
mkdir -p zkData
```
(2)修改 conf 文件
```
cd conf
```
```
mv zoo_sample.cfg zoo.cfg
```
```
vim zoo.cfg
```
在 zoo.cfg 文件中修改 dataDir 参数,在文件中添加新 zookeeper 集群信息,如下图所示

```
dataDir=/opt/module/apache-zookeeper-3.8.4-bin/zkData
```
```
#################### cluster ####################
server.2=hadoop113:2888:3888
server.3=hadoop201:2888:3888
server.4=hadoop202:2888:3888
```
(3)在 zkData 目录下创建 myid 文件
```
cd /opt/module/apache-zookeeper-3.8.4-bin/zkData
touch myid
```
在 myid 文件中输入服务编号 2
```
vi myid
```
分发 zookeeper 集群文件
```
xsync /opt/module/apache-zookeeper-3.8.4-bin/
```
(4)修改集群中除主机外,其余机子的 myid 文件(103号、104号)
在 103 号机子修改 myid 文件的 2 为 3
在 104 号机子修改 myid 文件的 2 为 4
```
su - jyx
vim /opt/module/apache-zookeeper-3.8.4-bin/zkData/myid
```
###### 3.启动 zookeeper 集群
分别启动 zookeeper 集群(在102号、103号、104号机子上分别运行下面代码)
```
cd /opt/module/apache-zookeeper-3.8.4-bin/
bin/zkServer.sh start
```

查看集群状态,三台机子都运行以下代码,得出结果如下三图即为完成
```
bin/zkServer.sh status
```



关闭虚拟机,并保存快照
##### 九、配置 HDFS-HA
###### 1.修改 hdfs 文件(主机上,主机:102)
```
su - jyx
cd $HADOOP_HOME/etc/hadoop
```
(1)修改 hadoop-env.sh 文件
```
vim hadoop-env.sh
```
在文件最后添加以下代码
```
export JAVA_HOME=/opt/module/jdk1.8.0_212
```

分发 hadoop-env.sh 文件
```
xsync hadoop-env.sh
```
(2)修改 core-site.xml 文件
```
vim core-site.xml
```

分发 core-site.xml 文件
```
xsync core-site.xml
```
(3)修改 hdfs-site.xml 文件
```
vim hdfs-site.xml
```
在文件中添加以下代码,黄框内改为自己的机子
```
dfs.nameservices
mycluster
dfs.ha.namenodes.mycluster
nn1,nn2,nn3
dfs.namenode.rpc-address.mycluster.nn1
hadoop113:8020
dfs.namenode.rpc-address.mycluster.nn2
hadoop201:8020
dfs.namenode.rpc-address.mycluster.nn3
hadoop202:8020
dfs.namenode.http-address.mycluster.nn1
hadoop113:9870
dfs.namenode.http-address.mycluster.nn2
hadoop201:9870
dfs.namenode.http-address.mycluster.nn3
hadoop202:9870
dfs.namenode.shared.edits.dir
qjournal://hadoop113:8485;hadoop201:8485;hadoop202:8485/mycluster
dfs.client.failover.proxy.provider.mycluster
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/home/jyx/.ssh/id_ecdsa
dfs.journalnode.edits.dir
${hadoop.data.dir}/jn
```

分发 hdfs-site.xml 文件
```
xsync hdfs-site.xml
```
###### 2.启动集群
(1)在每个机子上启动 journalnode 服务和 Zookeeper 服务,并清除 data 和 logs 文件(102号、103号、104号)
```
su - jyx
cd /opt/module/apache-zookeeper-3.8.4-bin
bin/zkServer.sh start
hdfs --daemon start journalnode
rm -rf /opt/module/hadoop-3.1.3/logs
rm -rf /opt/module/hadoop-3.1.3/data
```
(2)在主机上格式化namenode,并启动(主机:102)
```
hdfs namenode -format
hdfs --daemon start namenode
```
(3)在其余机子上同步主机的 namenode 数据,并启动(103号、104号)
```
hdfs namenode -bootstrapStandby
hdfs --daemon start namenode
```

(4)启动所有节点的 datanode(102号、103号、104号)
```
hdfs --daemon start datanode
```
(5)将主机切换为 Active(主机:102)
```
hdfs haadmin -transitionToActive nn1
```
(6)查看主机状态(主机:102)
```
hdfs haadmin -getServiceState nn1
```

关闭虚拟机,并保存快照
###### 3.配置 HDFS-HA 自动故障转移
在主机修改 hadoop 文件(主机:102)
```
su - jyx
cd $HADOOP_HOME/etc/hadoop
```
(1)修改 hdfs-site.xml 文件
```
vim hdfs-site.xml
```
在文件中添加以下代码
```
dfs.ha.automatic-failover.enabled
true
```

分发 hdfs-site.xml 文件
```
xsync hdfs-site.xml
```
(2)修改 core-site.xml 文件
```
vim core-site.xml
```
在文件中添加以下代码(机子改成自己的)
```
ha.zookeeper.quorum
hadoop113:2181,hadoop201:2181,hadoop202:2181
```

分发 core-site.xml 文件
```
xsync core-site.xml
```
(3)启动集群的 Zookeeper 服务(102号、103号、104号)
```
su - jyx
cd /opt/module/apache-zookeeper-3.8.4-bin
bin/zkServer.sh start
```
(4)初始化 Zookeeper 集群服务
```
hdfs zkfc -formatZK
```
(5)启动 HDFS 服务(主机:102)
```
start-dfs.sh
```

(6)验证是否配置成功
在主机上断开服务,需要输入 root 用户密码
```
service network stop
```

查看自动转移的机子状态(103号机子)
```
hdfs haadmin -getServiceState nn2
```

关闭虚拟机,并保存快照
##### 十、配置 YARN-HA
###### 1.修改 yarn 文件(主机上,主机:102)
```
su - jyx
cd $HADOOP_HOME/etc/hadoop
```
修改 yarn-site.xml 文件
```
vim yarn-site.xml
```
在文件中添加以下代码,黄框内填自己的机子
```
yarn.resourcemanager.ha.enabled
true
yarn.resourcemanager.cluster-id
cluster-yarn1
yarn.resourcemanager.ha.rm-ids
rm1,rm2
yarn.resourcemanager.hostname.rm1
hadoop113
yarn.resourcemanager.hostname.rm2
hadoop201
yarn.resourcemanager.zk-address
hadoop113:2181,hadoop201:2181,hadoop202:2181
yarn.resourcemanager.recovery.enabled
true
yarn.resourcemanager.store.class
org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore
```

分发 yarn-site.xml 文件
```
xsync yarn-site.xml
```
###### 2.启动集群
(1)启动集群的 Zookeeper 服务(102号、103号、104号)
```
su - jyx
cd /opt/module/apache-zookeeper-3.8.4-bin
bin/zkServer.sh start
```
(2)启动集群(主机:102)
```
start-dfs.sh
```
(3)启动 YARN 服务(主机:102)
```
start-yarn.sh
```
(4)查看 YARN-HA 服务状态(103号)
```
yarn rmadmin -getServiceState rm2
```
