Hadoop--xsync分发脚本

编写集群分发脚本xsync:

1. scp(secure copy):安全拷贝

①. scp定义:scp可以实现服务器与服务器之间的数据拷贝(from server1 to server2);

②. 基本语法:

 scp         -r              $pdir/$fname                $user@host:$pdir/$fname
 命令        递归          要拷贝的文件路径/名称        目的地用户@主机:目的地路径/名称

③. 案例:
a. 在Hadoop102、Hadoop103、Hadoop104上都已创建好的opt/module//opt/software两个目录,并且目录名修改为xiaobai:xiaobai:

[xiaobai@hadoop102 ~]$ sudo chown xiaobai:xiaobai -R /opt/module

b. 在hadoop102上,将hadoop102中的/opt/module/jdk1.8.0_144 目录拷贝到hadoop103上:

[xiaobai@hadoop102 ~]$ scp -r /opt/module/jdk1.8.0_144 xiaobai@hadoop103:/opt/module/

c. 在hadoop103上,将hadoop102中/opt/module/hadoop-3.2.2目录拷贝到hadoop103上:

[xiaobai@hadoop103 ~]$ scp -r xiaobai@hadoop102:/opt/module/hadoop-3.2.2 /opt/module/

tips:
1.在hadoop102上连接hadoop103要输入hadoop103的用户名及主机名称和对应的地址:xiaobai@hadoop103: /地址;
同样,在hadoop103上连接hadoop102也要输入hadoop102的用户名及主机名称和对应的地址:xiaobai@hadoop102: /地址;

2.在hadoop103上也可以将hadoop102的文件拷贝到hadoop104上(由于/opt/module下只有jdk/hadoop,所以可用 “ * ” 一次性复制,要复制单个文件也可补全文件名):

[xiaobai@hadoop103 ~]$ scp -r xiaobai@hadoop102:/opt/module/*  xiaobai@hadoop104:/opt/module/
xiaobai@hadoop102's password: 
The authenticity of host 'hadoop104 (192.168.10.104)' can't be established.
ECDSA key fingerprint is SHA256:97X64xBWvWbC3aB39376dykfVlJ1/Eq6kNFSObPp7NQ.
ECDSA key fingerprint is MD5:98:00:9e:9c:15:7a:7c:20:f8:a4:32:97:af:c2:1d:25.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'hadoop104,192.168.10.104' (ECDSA) to the list of known hosts.
xiaobai@hadoop104's password: 

2. rsync远程同步工具:

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别: 用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

①. 基本语法:

rsync    -av            $pdir/$fname              $user@$host:$pdir/$fname
命令     选项参数    要拷贝的文件路径/名称     目的地用户@主机:目的地路径/名称

选项参数说明:

选项 功能
-a 归档拷贝
-v 显示复制过程

②. 案例:
a. 删除hadoop103中/opt/module/hadoop-3.2.2/wcinput:

[xiaobai@hadoop103 hadoop-3.2.2]$ rm -rf wcinput/ wcoutput/

b. 同步hadoop102中的/opt/module/hadoop-3.2.2到hadoop103中(只同步了wcinput/ wcoutput/):

[xiaobai@hadoop102 module]$ rsync -av hadoop-3.2.2/ xiaobai@hadoop103:/opt/module/hadoop-3.2.2/

③. xsync集群分发脚本:

1). 需求:循环复制文件到所有节点的相同目录下:
2). 需求分析:
a. rsync命令原始拷贝:

rsync -av /opt/module xiaobai@hadoop104:/opt/

b. 期望脚本:
xsync要同步的文件名称

c. 期望脚本在任何路径都能使用(脚本放在声明了全局环境变量的路径):

[xiaobai@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/opt/module/jdk1.8.0_144/bin:/opt/module/hadoop-3.2.2/bin:/opt/module/hadoop-3.2.2/sbin:/home/xiaobai/.local/bin:/home/xiaobai/bin

3). 脚本实现:

a. 在/home/xiaobai/bin目录下创建xsync文件:

[xiaobai@hadoop102 ~]$ cd /home/xiaobai/
[xiaobai@hadoop102 ~]$ mkdir bin
[xiaobai@hadoop102 ~]$ cd bin
[xiaobai@hadoop102 bin]$ vim xsync

在该文件中编写如下代码:

#!/bin/bash

#1. 判断参数个数
if [ $# -lt 1 ]
then
        echo Not Enough Argument!
        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 exits!
                fi
        done
done

tips:

#5. 获取父目录
pdir=$(cd -P $(dirname $file);pwd)
-P 表示进入根目录,而非软链接!

#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host “mkdir -p $pdir”
-p 表示无论目标路径上的目标文件夹是否存在,都创建一个目标文件夹,以保证目标路径/目标文件夹 $ pdir/$fname存在!

b. 修改脚本xsync具有执行权限:

[xiaobai@hadoop102 bin]$ chmod +x xsync

在这里插入图片描述
tips:记得修改xsync权限!变色啦,xsync有了可执行的权限!

c. 测试脚本:

[xiaobai@hadoop102 ~]$ xsync /home/xiaobai/bin/

d. 将脚本复制到/bin中,以便全局调用:

[xiaobai@hadoop102 bin]$ sudo cp xsync /bin/

eg:同步当前/bin目录:

[xiaobai@hadoop102 ~]$ xsync bin/

查看hadoop103/hadoop104已经存在了xsync脚本:
在这里插入图片描述

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

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

tips: 如果用了sudo,那么xsync一定要补全路径!
使用sudo找不到xsync命令,因为脚本在/home/xiaobai/bin/目录下,root用户找不到这个路径,所以用./bin/xsync当前路径,可找到xsync命令,可同步root用户;

在hadoop103/hadoop104上使用以下命令查看环境变量是否已经存在:

[xiaobai@hadoop103 bin]$ sudo vim /etc/profile.d/my_env.sh 

在这里插入图片描述

  • 0
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值