1. 程式人生 > >centos7搭建hadoop叢集之rsync和xsync

centos7搭建hadoop叢集之rsync和xsync

文章記錄於各個伺服器(或者虛擬機器等)已經配置了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具有最高許可權,也可以操作任何檔案):
    在這裡插入圖片描述
    在這裡插入圖片描述
    遠端同步後各個目標節點接收檔案後所屬者:
    在這裡插入圖片描述
    在這裡插入圖片描述