Hadoop学习笔记-入门(3)-编写xsync分发脚本

脚本编写

目前我们使用的是syh用户。

我们希望编写一个分发脚本,它能够循环复制文件到所有节点的相同目录之下。并且我们希望脚本在任何路径都能够使用。

首先,我们将脚本放在syh用户的bin目录下,完整路径为/home/syh/bin,在bin目录中,我们创建xsync文件并写入以下内容:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
#!/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

之后为这个文件添加执行权限:

1
chmod +x xsync

之后我们要配置环境变量,仍然使用我们之前创建的my_env.sh文件,在其中增加如下内容:

1
sudo vim /etc/profile.d/my_env.sh
1
2
3
#HOME_BIN
export MYBIN_HOME=/home/syh
export PATH=$PATH:$MYBIN_HOME/bin

之后刷新环境变量:

1
source /etc/profile

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

1
sudo cp /home/syh/bin/xsync /bin/

这样,如果是使用sudo使用xsync命令的话,则需要使用如下方式

1
sudo ./bin/sxync ...

文件分发

之后我们可以使用刚才编写的xsync脚本来进行文件分发

举例来说,我们将刚才的java文件夹发送出去,在hadoop102下执行

1
xsync /ept/module/jdk1.8.0_212

类似地,我们需要完成/home/syh/bin目录和/opt/module/hadoop-3.1.3目录的分发

命令使用

在Linux服务器上进行文件传输会涉及到两个命令

1.scp安全拷贝

它的基本语法如下:

1
scp -r $user@$host:$pdir/$fname $user@$host:$pdir/$fname

其中,前者为被拷贝的文件目录,后者是目标文件目录。scp可以完成任意两台服务器之间的文件拷贝,只要用户名密码匹配即可。如果是在本机上的文件目录,则可以不用添加user和host,直接用路径即可。

scp每次都会完成文件的全部复制操作。

2.rsync远程同步

rsync完成的是同步操作,同步即指的是会复制修改不同的文件,而不会全部复制,因此在执行的时候会比scp快一些。它主要用于备份和镜像,具有速度快、避免复制相同内容和支持符号链接的优点。

基本语法如下:

1
rsync -av $user@$host:$pdir/$fname $user@$host:$pdir/$fname

它与scp命令有类似的特点,区别在于一个是复制,一个是同步。


Hadoop学习笔记-入门(3)-编写xsync分发脚本
http://example.com/2022/02/17/Hadoop学习笔记-入门-3-编写xsync分发脚本/
作者
EverNorif
发布于
2022年2月17日
许可协议