3台客户机(关闭firewall、静态IP、主机名称) 安装JDKHadoop 配置各自的环境变量 配置集群 单点启动 配置ssh 群起并测试集群

scp、rsync的用法

现在在hadoop102上已经配置好jdkhadoop

hadoop103hadoop104上还没有安装配置,可以采用编写集群分发脚本xsync
scp,可以实现服务器和服务器之间的数据拷贝。
例如

scp -r jdk1.8.0_212/ fygod@hadoop103:/opt/module/

当然也可以从原主机拉取

scp -r fygod@hadoop102:/opt/module/hadoop-3.1.3 ./

其中-r代表递归

能否在hadoop103上将hadoop102复制到hadoop104上?

scp -r fygod@hadoop102:/opt/module/* fygod@hadoop104:/opt/module/

保证hadoop103上对hadoop104下对hadoop102畅通即可

rsync远程同步工具主要用于备份和镜像,速度快、避免了相同内容和符号链接复制的优点,相比而言,rsync之对于差异文件做更新,scp是把所有文件都复制过去;例如上图Hadoop102中的Hadoop新增了xml文件,如果全盘复制会将整个新增xml后的文件复制一份至Hadoop103中,效率不高;同步则只会新增变更过的文件。
例如

rsync -av hadoop-3.1.3/ fygod@hadoop103:/opt/module/hadoop-3.1.3/

其中-a代表归档拷贝,-v代表显示复制的过程

综合上述对于全盘复制和远程同步的介绍,如果第一次使用,可以使用scp;如果后续修改则使用rsync

xsync集群分发脚本

需求:循环复制文件到所有节点的相同目录下
rsync原始命令拷贝
rsync -av 原路径/文件名 user@目标用户:目标路径
期望脚本
xsync 要同步的文件名称
期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径)
/home/user/bin目录下创建xsync脚本

#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
   echo Not Enough Arguement!
   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

修改权限,测试

xsync /home/fygod/bin

将脚本复制到/bin下,以便全局调用

sudo cp xsync /bin/

同步环境变量配置(root所有者)

[fygod@hadoop102 ~]$ sudo ./bin/xsync
/etc/profile.d/my_env.sh

注意:如果用了sudo,那么一定得将xsync的路径补全。
让环境变量生效

[fygod@hadoop103 ~]$ source /etc/profile
[fygod@hadoop104 ~]$ source /etc/profile

xsync同步脚本的使用使得复制非常方便快捷,但是每次输入密码实在麻烦,怎么实现免密登录?
https://wo92fy.club/index.php/archives/151/
这样就好了,3次回车即可,不用输入密码了