在完成一台虚拟机的java和hadoop安装后,我们开始要同时部署好其他几台虚拟机。但是一个一个装的话,就非常低效了。所以我们要通过脚本来完成。
目前,Hadoop100已经装完了jdk和hadoop。其他3台虚拟机完成了网络配置,我们可以通过分发脚本,来为它们安装jdk和hadoop。
两种拷贝方式
- SCP 安全拷贝
scp可以实现服务器与服务器之间的数据拷贝。
基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径
举例:
要将hadoop100的hadoop包拷贝到hadoop101
scp -r niliu@hadoop100:/opt/module/hadoop-2.7.2 niliu@hadoop101:/opt/module
scp的指令可以跨服务器执行,也就是可以不在hadoop100这台虚拟机上执行,比如在hadoop102执行。
scp的方式拷贝有个弊端,它只是单纯的拷贝文件内容,复制过来不带时间戳和所有者权限。所以我们编写分发脚本会使用第二种方式 rsync 远程同步
- rsync 远程同步
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去,且复制的文件带有所有者权限和时间戳。
基本语法
rsync -av $pdir/$fname $user@hadoop$host:$pdir
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径
参数说明
-a:归档拷贝
-v:显示复制过程
举例
要将hadoop100的hadoop包拷贝到hadoop101
rsync -av /opt/module/hadoop-2.7.2 root@hadoop101:/opt/module
脚本编写
#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi
#2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname
#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir
#4 获取当前用户名称
user=`whoami`
#5 循环
for((host=101; host<104; host++)); do
echo ------------------- hadoop$host --------------
rsync -av $pdir/$fname $user@hadoop$host:$pdir
done
在hadoop100虚拟机上,到根目录下,开始创建名为xsync的脚本文件
指令:cd ~
指令:vim xsync
然后把脚本写入
修改脚本执行权限
指令:chmod 777 xsync
文件变绿了,说明修改成功了
再将脚本文件添加环境变量,这样在任何目录下都可以执行
指令:sudo cp xsync /bin
进入module目录开始执行脚本,分别拷贝hadoop、jdk、etc/profile(环境变量)
指令:cd /opt/module
拷贝hadoop
指令:xsync hadoop-2.7.2
拷贝完成
拷贝jdk
指令:xsync jdk1.8.0_144
拷贝完成
拷贝etc/profile
指令:sudo xsync /etc/profile(要用root权限)
拷贝完成
此时打开Xshell的撰写栏,改为输入全部会话
输入指令service network restart重启网络
如果报错就重启虚拟机即可
最后依次检查一下,发现3个虚拟机都安装配置好了,大功告成!