(一)hadoop集群搭建——1.2集群文件传输

  • 1.scp命令介绍(全量同步)
  • 2.rsync命令介绍(增量同步)
  • 3.免输入密码介绍
  • 4.集群免密登录配置
  • 5.编写集群分发文件脚本


1.scp命令介绍(全量同步)

scp命令为安全拷贝命令,使用方式为:

scp  -r  源文件用户名A@主机名1:path1  目标文件用户名B@主机名2:path2

要求:用户名A@主机名1对path1有读权限,用户名B@主机名2对path2有写权限

2.rsync命令介绍(增量同步)

rsync对比文件的修改时间,增量同步,只能将本机文件同步,使用方式为:

rsync  -rvlt  path1  目标文件用户名B@主机名2:path2

-r:递归,复制目录;-v:显示复制的过程;-l:同步软链接;-t:基于文件的修改时间进行对比,只同步修改时间不同的文件。

注意:path1是个目录,目录以 / 结尾,只会同步目录中的内容,不会同步目录本身。

3.免输入密码介绍

我们后面将要编写集群中的文件分发和统一执行命令脚本,所以需要配置集群机器之间的免输入密码登录,这里借助ssh实现。

举例:A机器的a用户,希望在A机器上使用b用户的身份登录到B机器上。

实现步骤:1.A机器的a用户没在A机器上生成一对密钥

ssh-keygen -t rsa

实现步骤:2.密钥分为公钥和私钥,a用户需要将公钥拷贝到B机器上b用户的家目录下。
在A机器,使用a用户执行以下命令

ssh-copy-id b@B

实现步骤:3.A机器的a用户,可以使用ssh b@B进行登录。

注意:如果使用ssh跟上ip地址直接登录,默认使用当前用户对目标主机进行登录。

4.集群免密登录配置

按照第3点,在集群h1、h2、h3中分别配置免密登录

5.编写集群分发文件脚本

作用:将当前机器的文件,同步到集群所有机器的相同路径下!
用户在使用xsync时,只需要传入要同步的文件即可,脚本中需要将相对路径转化为绝对路径。

[hzhao@h2 ~]# cd
[hzhao@h2 ~]# mkdir bin
[hzhao@h2 ~]# vim bin/xsync

编写脚本内容为

#!/bin/bash
#校验参数是否合法
if(( $#==0))
then
        echo 请输入要分发的文件!
        exit;
fi

#获取要分发文件的绝对路径
dirpath=$(cd `dirname $1`;pwd -P)
filename=`basename $1`

echo 要分发的文件的路径是:$dirpath/$filename

#循环执行rsync分发文件到集群的每条机器
for((i=1;i<=3;i++))
do
        echo -------------------------h$i---------------------------
        rsync -rvlt $dirpath/$filename h$i:$dirpath
done

修改文件权限

[hzhao@h2 ~]# chmod 755 bin/xsync

后面集群分发文件可以使用xsync命令进行分发

比如:

[hzhao@h2 module]# xsync jdk1.8.0_121/
要分发的文件的路径是:/opt/module/jdk1.8.0_121
-------------------------h1---------------------------
sending incremental file list

sent 56191 bytes  received 215 bytes  112812.00 bytes/sec
total size is 370129239  speedup is 6561.88
-------------------------h2---------------------------
sending incremental file list

sent 56191 bytes  received 215 bytes  112812.00 bytes/sec
total size is 370129239  speedup is 6561.88
-------------------------h3---------------------------
sending incremental file list

sent 56191 bytes  received 215 bytes  112812.00 bytes/sec
total size is 370129239  speedup is 6561.88

至此集群文件传输完成!