按照前面的克隆,需要准备三台服务器,master,slave01,slave02.(服务器设置了静态IP、主机名称、关闭防火墙)。
主机名 | IP地址 | 防火墙|禁用开机自启 | JDK和Hadoop环境变量 |
master | 192.168.52.100 | 关闭 | 已配置 |
slave01 | 192.168.52.101 | 关闭 | 未配置 |
slave02 | 192.168.52.102 | 关闭 | 未配置 |
你所准备的虚拟机配置与上表相同情况下,接着我们来进行其他操作。
在master中完成了 JDK安装和环境变量配置,安装了hadoop和环境变量配置。
后期我们需要将master主机上安装的软件,以及后期集群配置文件修改后需要同步到其他机器上,此时最好提供脚本分发,这样方便统一管理。
1.首先给大家介绍下scp复制命令
scp
是一个在 Linux 下用于进行远程文件拷贝的命令,它可以实现本地和远程服务器之间的文件传输。
基本格式:
scp [参数] [原路径] [目标路径]
我们常用:
scp -r $pdir/$fname $user@$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
2.通过scp命令将master上的jdk8目录拷贝到slave01、slave02的/opt/module目录下。
2.1 首先确保slave01,slave02机器上有/opt/software /opt/module ,同时确保属于yt:yt用户:用户组,如果不属于当前用户需要先改变用户:用户组权限(忘了的同学建议看前面文章,关于模版虚拟机准备)。
2.2 将master主机上 jdk8目录远程拷贝到slave01上。(现在输入的命令是在master主机上)
输入命令:scp -r jdk8/ yt@slave01:/opt/module/
首次访问按提示输入yes,按提示输入slave01的密码。(刚刚传输slave01时忘了截图,下图为将jdk8目录拷贝到slave02上的提示信息)。
输入命令:scp -r jdk8/ yt@slave02:/opt/module/
2.3 可进入到slave01,slave02中查看jdk8是否传输过来。
说明通过scp命令远程拷贝成功。
3.通过scp命令将master上的hadoop-3.1.4目录拷贝到slave01、slave02的/opt/module目录下。
与2中的操作相同。
3.1 此处我们介绍下载slave01上将master中数据使用scp 远程拉数据到slave01上。
在slave01上 输入命令:
scp -r yt@master:/opt/module/hadoop-3.1.4 /opt/module/
3.2 可以在slave01上使用scp命令将master数据拉取到slave02上
在slave01上输入命令:
scp -r yt@master:/opt/module/hadoop-3.1.4 yt@slave02:/opt/module/
需要输入master 和slave02的密码。
截图上命令显示有问题,大家直接复制即可。
最后在slave01,slave02检查下是否拷贝成功。
4.现在给大家介绍另一个命令:rsync
rsync 就是远程同步的意思remote sync.
rsync 被用在UNIX / Linux执行备份操作操作.
rsync 工具包被用来从一个位置到另一个位置高效地同步文件和文件夹. rsync可以实现在同一台机器的不同文件直接备份,也可以跨服务器备份.
具有速度快、避免复制相同内容和支持符号链接的优点。
rsync -av $pdir/$fname $user@$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的地用户@主机:目的地路径/名称
选项参数说明
选项 功能
-a 归档拷贝
-v 显示复制过程
4.2 删除slave01上/opt/module/hadoop-3.1.4/input 和/opt/module/hadoop-3.1.4/output目录
4.3 将Master上/opt/module/hadoop-3.1.4下的内容同步到slave01上
输入命令: rsync -av /opt/module/hadoop-3.1.4/ yt@slave01:/opt/module/hadoop-3.1.4/
说明咱们系统中没有此命令,需要先安装
输入命令:sudo yum install rsync
如果遇到需要输入直接输入y
安装完成后,再重新运行命令 (建议在master ,slave01,slave02上都安装此命令 rsync)
4.4 在slave01上查看,input,output目录又同步过来了。
注意:记得在master,slave01.slave02上都需要安装rsync命令
5.xsync 集群分发脚本
上面每次在分发内容时都是通过命令完成的,本次我们将这些命令写在一个脚本中,且让该脚本在任何命令下都是执行。
查看Path配置了哪些路径,我们会发现当前用户下bin也配置了,所以我们可以将xsync文件放到此目录下, 就可以在任何位置执行了。
脚本实现:
(1)在/home/yt/bin目录下创建xsync文件
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2 遍历集群所有机器
for host in master slave01 slave02
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
(2) 修改文件权限
(3)将当前用户的bin下的文件同步到slave01,slave02上
可以去检查其他几个从服务器上都有该文件的存在。
(4)使用脚本将my_env.sh文件同步到其他从服务器上去
my_env.sh属于系统文件,需要获取root权限
输入命令: sudo .bin/xsync /etc/profile.d/my_env.sh
(5)检查环境变量是否分发完成(slave01,slave02都需要检查)
(6)最后在slave01,slave02上执行source命令,后测试java命令是否显示版本信息
以上操作完成了远程文件同步。(后期修改了文件后,都可以通过xsync脚本执行)