Hadoop--xsync分发脚本

编写集群分发脚本xscp -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 

Hadoop--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脚本:
Hadoop--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  
Hadoop--xsync分发脚本

版权声明:玥玥 发表于 2021-06-11 13:44:35。
转载请注明:Hadoop--xsync分发脚本 | 女黑客导航