目录
我们在搭建Hadoop完全分布式集群的过程中,要修改很多配置文件或者是安装很多软件,在这个过程中,如果集群数量很大,我们不能把每个节点都编辑一遍,这样既费时又容易出错。因此本文将讲解一个集群分发脚本,只要在一个节点编辑好,再通过分发脚本发送给其他节点就可以了。
(注意:这里因为xsync脚本代码的问题,我把主机名hadoop01、hadoop03和hadoop04分别改成hadoop101、hadoop103和hadoop104,前面相应的配置文件如slaves、hosts、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、windows主机映射文件也要修改)
1.scp 安全拷贝
(1)定义
scp可以实现服务器与服务器之间的数据拷贝。(from hadoop01 to hadoop03)
(2)基本语法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 递归 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
(永远都是源数据) (后面永远是目的地数据)
(3)例子
①在hadoop01上,将hadoop01(/usr/text)上的个文件拷贝到hadoop03(/usr/text)上
[root@hadoop01 usr]# scp -r text root@hadoop03:/usr
拷贝成功,由于之前配置过了SSH,因此不需要输入密码
②在hadoop03上,将hadoop01(/usr/text)上的个文件拷贝到hadoop03(/usr/text)上
[root@hadoop03 text]# scp -r root@hadoop01:/usr/text ./
./是拷贝到当前目录
拷贝成功,由于之前配置过了SSH,因此不需要输入密码
③在hadoop03上,将hadoop01(/usr/text)上的个文件拷贝到hadoop04(/usr/text)上
[root@hadoop03 usr]# scp -r root@hadoop01:/usr/text root@hadoop04:/usr
拷贝成功,由于之前配置过了SSH,因此不需要输入密码
注意:拷贝过来的文件,可以根据需要修改所有者和所有者组。如果是拷贝配置文件,别忘source一下/etc/profile。
2.rsync 远程同步工具
(1)定义
rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
(2)rsync和scp的区别
用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新,scp是把所有文件都复制过去。
(3)基本语法
rsync -rvl $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 选项参数 要拷贝的文件路径/名称 目的用户@主机:目的路径/名称
(源数据) (目的地址)
(4)参数列表
选项 | 功能 |
-r | 递归 |
-v | 显示复制过程 |
-l | 拷贝符号连接 |
(5)例子
把hadoop01上的/usr/text/里新建的文件(3333)目录同步到hadoop03中/usr/text下
[root@hadoop01 usr]# rsync -rvl /usr/text/ root@hadoop03:/usr/text
3.xsync集群分发脚本(名字可以随便起)
(1)需求:循环复制文件到所有节点的相同目录下
(2)创建:在/usr/local/bin目录下创建了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
(3)修改脚本 xsync 具有执行权限
[root@hadoop101 bin]# chmod 777 xsync
(4)调用脚本形式
xsync 文件名称
[root@hadoop101 bin]# xsync /usr/text
至此,分发成功!