这一篇博客主要是介绍一些集群之间相互传输内容的一些方法和脚本,所以这篇博客还是非常具有实用价值的。

1. scp: 安全拷贝

scp可以实现服务器与服务器之间的数据拷贝。

格式:

scp    -r       $pdir/$fname            $user@hadoop$host:$pdir/$fname
命令   递归   要拷贝的文件路径/名称       目的用户@主机:目的路径/名称
[root@hadoop102 ~]# scp -r hadoop100:/opt/module/* hadoop102:/opt/module

这里要确保hadoop102有这个目录,否则会提示找不到这个目录。 -r: 递归复制整个目录。

2. rsync

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

[root@hadoop103 module]# rsync -av hadoop100:/opt/module/* /opt/module/

scp和rsync两者的区别:

  1. scp对于目的地址需要指定主机名,这一就意味着可以在任意一台主机上操作其他主机;rsync则不行,只能针对本主机。
  2. rsync速度更快;rsync只对差异文件进行更新,scp全部都会复制过去。

基本语法:

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

选项参数说明 |选项|功能| |:-:|:-:| |-r|递归| |-v|显示复制过程| |-l|拷贝符号连接|

3. 使用脚本

需求:循环阯文件到所有节点的相同目录下。 需求分析: (1)参考rsync命名:rsync -rlv /opt/module root@hadoop103:/opt/ (2)期望脚本实现:xsync 要同步分文件名称 (3)在/home/zohar/bin目录下存放该脚本,zohar用户可以在系统的任何地方直接执行。

根据上面的需求分析,进行实现:

  1. 在/home/zohar目录下创建bin目录,并在bin目录下创建xysnc脚本文件。
    [zohar@hadoop102 ~]$ mkdir bin
    [zohar@hadoop102 ~]$ cd bin/
    [zohar@hadoop102 bin]$ vim xsync
    
  2. 用vi编辑器编写xysnc脚本代码:
[zohar@hadoop100 ~]$ vim xsync 

具体代码如下:

#!/bin/bash
# 1. 获取输入参数的个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

# 2. 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname

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

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

# 5. 循环
for((host=103;host<105;host++));do
        echo ----------------hadoop$host-------------------
        rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

运行

[root@hadoop100 module]# ./xsync hadoop-2.10.0/

这里可以吧xsync复制到/bin目录下,这样就可以直接输入xsync命令了,而不用指明全路径了。cp xysnc /bin