大數據集群經常涉及文件拷貝,我在學習大數據時總結了幾種方式
三台主機:192.168.10.100
、192.168.10.101
、192.168.10.102
有一個一樣的用戶:swcode
做過映射關系:
hadoop100 192.168.10.100
hadoop101 192.168.10.101
hadoop102 192.168.10.102
SCP拷貝
scp
會拷貝所有指定內容
1、向192.168.10.101
推送數據
scp -r /home/swcode/test.txt test1@192.168.1.101:/home/swcode
2、從192.168.10.100
拉取數據
scp -r swcode@192.168.1.101:/home/swcode/test.txt /home/swcode/
3、在192.168.10.101
上將192.168.10.100
的數據拷貝到192.168.10.102
上
scp -r swcode@192.168.1.100:/home/swcode/test.txt swcode@192.168.1.102:/home/swcode/
RSYNC同步
rsync
只會復制不一樣的內容
1、同步192.168.10.100
和192.168.10.101
的~
目錄
rsync -av /home/swcode/ swcode@192.168.10.101:/home/swcode
沒有的可以安裝
yum install -y rsync
2、分發腳本xsync
,可以放到/etc/profile.d/
中,全局使用(別忘了chomd
執行權限)
#!/bin/bash
#1. 判斷參數個數
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍歷集群所有機器,hosts內做過映射關系:hadoop102 192.168.10.102
for host in hadoop101 hadoop102
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/$filename $host:$pdir
else
echo $file does not exists!
fi
done
done