1. 准备工作
1.1 防护墙设置
1. 关闭各主机的防火墙
systemctl stop firewalld
2. 禁止防火墙开机自启动
systemctl disable firewalld
1.3 重启服务
reboot
1.4 查看防火墙状态
systemctl status firewalld
1.5 关闭Selinux
vim /etc/sysconfig/selinux
将 SELINUX=enforcing 改成 SELINUX=disabled
1.2 各集群系统文件夹创建
hadoop103与hadoop104 两个系统分别在/opt目录下创建两个目录module与software
![](https://img-blog.csdnimg.cn/dfa7a2be2fb8475fa0da286389f74e1b.png)
![](https://img-blog.csdnimg.cn/65dd9d2caed44b5084179364c1af64bb.png)
1.3 修改/etc//hosts文件
问题:
集群中的每一个虚拟机都要修改/etc//hosts文件,添加所有的虚拟机到文件中其他虚拟机访问
![](https://img-blog.csdnimg.cn/f788ebea7500467089dc72e36ad8de42.png)
问题解决:
# 在/etc/hosts文件中添加集群主机IP地址+hostname+别名
[root@hadoop102 ~]$ vim /etc/hosts
# 添加的内容
192.168.100.102 hadoop102 hadoop102
192.168.100.103 hadoop103 hadoop103
192.168.100.104 hadoop104 hadoop104
2. scp (secure copy) 安全拷贝
2.1 scp定义
scp可以实现服务器与服务器之间的数据拷贝。( from server1 to server2 )
2.2 基本语法
scp -r $pdir/$fname $user@host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
2.3 案例
前提:
1. 有三台服务器集群(hadoop102,hadoop103,hadoop104)
2. 都已经创建好的/opt/module、/opt/software两个目录,并且已经把这两个目录修改为atguigu:atguigu
3. 其中hadoop102中已安装有jdk与hadoop,现在要拷贝到另外两台服务器中。
案例一: 在hadoop102机器上拷贝jdk到hadoop103机器中
# 将hadoop102服务器的jdk拷贝到hadoop103的/opt/module/目录下
[root@hadoop102 module]$ scp -r jdk1.8.0_131/ root@hadoop103:/opt/module/
需要输入hadoop103的密码
hadoop103拷贝结果
案例二: 在hadoop103机器上拉取hadoop102的jdk到本机中
# 将hadoop102服务器的jdk拉取到hadoop103的/opt/module/目录下
[root@hadoop103 module]$ scp -r root@hadoop102:/opt/module/hadoop-3.1.3 ./
需要输入hadoop102的密码
hadoop103拉取结果
案例三: 在hadoop103机器上拉取hadoop102的jdk拷贝到hadoop104机器中
# 在hadoop103机器上拉取hadoop102的jdk拷贝到hadoop104机器中
[root@hadoop103 module]$ scp -r root@hadoop102:/opt/module/* root@hadoop104:/opt/module/
需要先输入hadoop102的密码,再输入hadoop104的密码
3. rsync远程同步工具
3.1 rsync定义
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别: 用rsync 做文件的复制要比 scp 的速度快,rsync 只对差异文件做更新。scp是把所有文件都复制过去。
3.2 rsync基础语法
rsync -av $pdir/$fname $user@host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
选项 |
功能 |
-a |
归档拷贝 |
-v |
显示复制过程 |
3.3 案例
(a)删除hadoop103中/opt/module/hadoop-3.1.3/下的wciput与 wcoutput文件
[root@hadoop103 hadoop-3.1.3]$ rm -rf wcinput wcoutput
查看hadoop目录
![](https://img-blog.csdnimg.cn/bce8976771e54ed29541a94989d2de9d.png)
(b)同步hadoop102中的/opt/module/hadoop-3.1.3/到hadoop103中,恢复这两个文件。
注意: 在hadoop102主机上发起同步
[root@hadoop102 module]$ rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/
![](https://img-blog.csdnimg.cn/99a9af1c38334dfea5587a61a6c57e7c.png)
4. xsync 集群分发
4.1 需求分析
(1)需求:循环复制文件到所有节点的相同目录下
(2)需求分析:
(a) rsync 命令原始拷贝:
rsync -av /opt/module root@hadoop103:/opt/module/
(b)期望脚本: 命令后直接跟文件名就可直接为集群中的其他服务器同步。
xsync 要同步的文件名称
(c)期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
[root@hadoop102 ~]$ echo $PATH
![](https://img-blog.csdnimg.cn/96a5dc2909d4480d9ed871bb70f4cacd.png)
4.2 脚本实现
上面已经查看了环境配置,其中有一个/root/bin目录,我们查看/root目录下并没有该bin目录,我们可以先创建一个bin目录,在bin目录中创建文件编写内容,就可实现全局生效。
![](https://img-blog.csdnimg.cn/f91a6c3003c640ac89c7eaeea461cd55.png)
(a) 在/root/bin 目录下创建 xsync文件
[root@hadoop102 bin]$ vim xsync
在该文件中编写如下代码:
# !/bin/bash
# 1. 判断参数个数(是否小于1,小于1直接退出)
if [ $# -lt 1 ]
then
echo Not Enough Arguemnet!
exit;
fi
# 2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ===================== $host =====================
# 3. 遍历所有目录,挨个发送
for file in $@
do
# 4. 判断文件是否存在
if [ -e $file ]
then
# 5. 获取父目录
pdir=$(cd -P $(dirname $file);pwd)
# 6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
添加文件权限
chmod 777 xsync
4.3测试
(a)分发bin目录:xsync文件各系统一份
[root@hadoop102 ~]$ xsync bin
(b)将hadoop102书写的JDK与Hadoop的配置环境文件分发到其他服务器中
hadoop102书写的配置文件目录
![](https://img-blog.csdnimg.cn/826a98a8d3f346f380636a1e75d3c67c.png)
![](https://img-blog.csdnimg.cn/09087591257b4f25a8d29b3e3611260f.png)
在hadoop102主机上分发/etc/profile.d/目录下的my_env.sh配置文件
xsync /etc/profile.d/my_env.sh
![](https://img-blog.csdnimg.cn/47d3c39f9ef049908ab9137550d4d646.png)
![](https://img-blog.csdnimg.cn/86e8be00871e419f8854a349c23d9e77.png)
5. 免密登录
5.1 免密登录原理
把自己服务器的公钥发送给其他服务器,那么访问别人的服务器就可以免密访问别人的服务器。
![](https://img-blog.csdnimg.cn/8122592e65c04ef2a33bf15e267d0765.png)
5.2 查看.ssh文件
该文件是在/root目录下的隐藏文件 ,切换到家目录
# -la 查看文件的所有文件/目录包含隐藏文件/目录
[root@hadoop102 ~]$ ls -la
因为xsync文件执行过ssh命令,所以会有一个.ssh文件
![](https://img-blog.csdnimg.cn/ca99fd5dd133462c818c1a162a9da352.png)
查看.ssh文件
![](https://img-blog.csdnimg.cn/48a8dbad85e34e679adfe56f8755ee09.png)
查看known_hosts文件,该文件记录有谁访问过
[root@hadoop102 .ssh]$ cat known_hosts
![](https://img-blog.csdnimg.cn/3887c4cd900644e194c697af1590378c.png)
5.3 配置无密访问
配置102 无密访问103,104
(a)生成102 的私钥与公钥
# 生成公钥与私钥,需要敲三次回车
[root@hadoop102 .ssh]$ ssh-keygen -t rsa
![](https://img-blog.csdnimg.cn/7ae9f05f86ee44d597b6441c165462a0.png)
再次查看 .ssh目录,又多了两个目录id_rsa(私钥)与id_rsa.pub(公钥)
![](https://img-blog.csdnimg.cn/df172e8ec5a9444a9774c5712ee71c33.png)
查看id_rsa(私钥)
![](https://img-blog.csdnimg.cn/0d3a00f95f48452599adfa58c45aac3b.png)
查看id_rsa.pub(公钥)
![](https://img-blog.csdnimg.cn/61937737ec9a48dc9d6cbfd81ee46919.png)
(b)发送公钥到其他服务器
将102上的公钥拷贝到103
[root@hadoop102 .ssh]$ ssh-copy-id hadoop103
第一次需要密码之后就不需要了
![](https://img-blog.csdnimg.cn/bc2c9245dd934c25b91503e7efb642fa.png)
测试能否能直接连接
![](https://img-blog.csdnimg.cn/5e2e388e78cb463f930a06f5aeb27409.png)
向104发送公钥
![](https://img-blog.csdnimg.cn/aa4f5a5ee32b46c3996b9f40001001a3.png)
对自己也发一份(自己访问时也需要密码)
配置完会多一个文件 authorized_keys,存储着其他服务器的公钥,用于免密访问
![](https://img-blog.csdnimg.cn/53f26846897640e891533d77b31624d8.png)
查看authorized_keys文件
![](https://img-blog.csdnimg.cn/cf0f2fb4dd3e4e74870fdb6b5438722b.png)
其他两台服务器重复上边操作
6. 查看集群所有服务器的运行进程
命令
[root@hadoop102 ~]# vim /bin/jpsall
文件内容
#!/bin/bash
for host in hadoop102 hadoop103 hadoop104
do
echo ========================= $host =========================
ssh $host jps
done
例如:
![](https://img-blog.csdnimg.cn/7d63cd99fb6d4fe2a69fdf6d57eee632.png)