centos7搭建hadoop叢集之rsync和xsync
阿新 • • 發佈:2018-11-15
文章記錄於各個伺服器(或者虛擬機器等)已經配置了ssh免密登入,可執行下面操作,未配置ssh免密登入,可參考:https://blog.csdn.net/yhblog/article/details/84029535
此文章是基於centos7minimal版本的,純淨系統,所以還需要安裝rsync工具(確保所有節點都必須安裝rsync)
否則報錯:
安裝成功:
啟動rsync服務
systemctl start rsyncd.service
systemctl enable rsyncd.service
執行結果:
rsync(remote synchronization)
- 原始操作命令: rsync -rvl local_file_path [email protected]_ip:remote_file_path
注:remote_username為遠端伺服器上的線上使用者,remote_ip可以換做主機名,前提是本機和遠端伺服器做了hosts對映
如:rsync -rvl /opt/module [email protected]:/opt/module
注:rsync -rvl 後面可以跟相對路徑和絕對路徑,但如果使用相對路徑需要先進入到填寫的路徑的父目錄(最好使用絕對路徑)
- 使用xsync指令碼迴圈同步檔案到各個目標節點的相同目錄下(需要使用者具有root許可權或者直接使用root使用者建立xsync)
1.sudo建立xsync檔案(root使用者可直接建立)
2.建立需要同步測試的檔案(分發到主機hadoop2和hadoop3)
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='d -P $(dirname $p1); pwd'
echo pdir=$pdir
#4 獲取當前使用者名稱稱
user='whoami'
#5 迴圈,這裡host根據自己的節點數和主機名設定
for((host=2; host<4; host++)); do
#echo $pdir/$fname [email protected]$host:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl $pdir/$fname [email protected]$host:$pdir
done
- 執行指令碼
- 必須更改讀寫許可權(使用sudo也不行)
- 執行成功(用root身份使用xsync命令,這裡需要一次輸入各個目標節點(需要分發檔案的伺服器)的root密碼才能實現傳送)
其他節點檢視檔案:
注意: - 1.確保各個節點都安裝了rsync工具並啟動(針對minimal版本,因為此版本任何工具都需手動安裝),可參考:https://blog.csdn.net/cdnight/article/details/78861543
- 2.xsync用root使用者執行時,在執行過程中需要輸入其他節點的root使用者密碼,過於繁瑣,可事先給本機root使用者配置ssh,通過ssh-copy-id到其他節點,實現免密登入,然後執行xsync命令就不需要輸入其他各個節點的root使用者密碼了,可參考:https://blog.csdn.net/yhblog/article/details/84029535
下圖是具有root許可權的york使用者,對york使用者配置了ssh,可以直接執行不用輸入其他使用者密碼:(如果除了root使用者,其他使用者不能執行xsync命令,就切換到root使用者執行)
- rsync可以將檔案遠端同步到其他節點的特定目錄下,而xsync一般是將本機上的檔案所在目錄位置遠端同步到其他節點相同的目錄下,不過上面xsync原始碼可以更改存放路徑,如:本機檔案位置是/opt/software/demo.txt,那麼遠端同步後,其他節點接收檔案後的存放位置也是/opt/software,然後/opt/software目錄有剛同步的檔案demo.txt
- 3.遠端同步後其他節點接收檔案後,此檔案的使用許可權是root,其他使用者必須具有root許可權或者更改檔案的使用許可權,因為使用xsync命令時是root使用者使用的(這是取決於上面指令碼的內容,腳本里面取了user變數值,其他目標節點都有一個共同的使用者,便於執行操作)
。
比如下面是york使用者使用的,則遠端同步後文件的使用許可權是york(當然,root具有最高許可權,也可以操作任何檔案):
遠端同步後各個目標節點接收檔案後所屬者: