linux文件分发工具

在 hadoop 集群操作中,经常需要在集群中的机器之间进行文件的拷贝,文件的同步等 工作。linux 中通过下面的一些指令、方法来实现这一功能。

1. scp-安全拷贝

安全拷贝指令 即 secure copy,是 linux 上基于 ssh 的一种机器与机器之间的文件拷贝指令。

1
2
# -r 表示递归拷贝  两个参数第一个为本地地址、文件; 第二个为目标机器用户,机器名,粘贴地址
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname

实例操作:将 master 上的 /opt/module 目录下的软件拷贝到 slave1 上。

1
2
3
4
5
6
7
8
9
10
# 在 master 上执行 -- 这里 slave1 的用户是 root,因为 /opt 只有 root 用户才有写权限
# 第一个路径为 master 上的待考贝的目录,第二个路径为拷贝目标路径
scp -r module root@slave1:/opt/module

# 例子2: 从 slave2 上拉取 master 上的文件。
# 在 slave2 机器上的 /opt 目录下执行
sudo scp -r root@master:/opt/module ./

# 例子3: 在同一网络内的第三个机器上,完成网内两个机器的文件传输
scp -r root@master:/opt/module root@slave3:/opt/module

拷贝完毕后,来到 slave2 和 slave3 机器上,修改 文件夹的所有者权限。

1
2
# -R 表示递归修改,一定不能忘记!!
sudo chown lab1:lab1 /opt/module/ -R

然后,拷贝 /etc/profile 文件,配置环境变量。

1
2
3
4
5
6
# 在 master 机器上执行
scp /etc/profile root@slave1:/etc/profile
scp /etc/profile root@slave2:/etc/profile

# 最后再两台 slave 机器上
source /etc/profile

2. rsync- 远程同步工具

不同于 scp, rsync 指令 只对区别文件进行跟新。主要用于备份和镜像,由于只更新差异文件,所以速度快。

1
2
# -r 递归, -v 显示复制过程,-l 拷贝符号链接
rsync -rvl $源数据 $目的地数据

需要注意的是,在所有的机器上必须都已经安装了 rsync 程序,如果没有安装,可以通过 yum install rsync -y (refLink), 即可以安装 rsync

3. 集群分发脚本

为了更加方便地将集群上某一台机器上更新的内容快速分发到集群的其他主机上,可以新建一个脚本,实现该功能。具体操作如下。

/home/lab1/bin 目录下 添加脚本。

note: 注意查看一下是否 /home/lab1/bin 在 path 中: echo $PATH

然后,将下列内容复制到 xsync 文件中。(作用:循环复制文件到所有结点的相同目录下。)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取文件名称 -- $1 表示第一个参数
p1=$1
fname=`basename $p1` # 取最后文件的名称
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=1; host<3; host++)); do
echo ------------------- slave$host --------------
rsync -rvl $pdir/$fname $user@slave$host:$pdir
done

复制完毕后,赋予该文件可执行权限。 chmod 777 xsync

再执行 xsync /home/lab1/bin 即可将更新内容分发到所有的 slave机器上。