第七章:完全分佈式運行模式(開發重點)
7.1.1 虛擬機準備
主機 | 從機 | 從機 | |
---|---|---|---|
主機名 | hadoop104 | hadoop105 | hadoop106 |
hostname | hadoop104 | hadoop105 | hadoop106 |
IP地址 | 192.168.153.104 | 192.168.153.105 | 192.168.153.106 |
7.1.2 編寫集羣分發腳本xsync
- scp(secure copy)安全拷貝
(1)scp定義:
scp可以實現服務器與服務器之間的數據拷貝。(from server1 to server2)
(2)基本語法
scp -r $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 遞歸 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
(3)案例實操
(a)在hadoop104上,將hadoop104中/opt/module目錄下的軟件拷貝到hadoop105上。
[zpark@hadoop104 /]$ scp -r hadoop104:/opt/module hadoop105:/opt/module
(b)在hadoop106上,將hadoop104服務器上的/opt/module目錄下的軟件拷貝到hadoop106上。
[zpark@hadoop106 opt]$sudo scp -r hadoop104:/opt/module hadoop106:/opt/module
(c)在hadoop103上操作將hadoop104中/opt/module目錄下的軟件拷貝到hadoop104上。
[zpark@hadoop103 opt]$ scp -r zpark@hadoop104:/opt/module root@hadoop104:/opt/module
注意:拷貝過來的/opt/module目錄,別忘了在hadoop104、hadoop105、hadoop106上修改所有文件的,所有者和所有者組。
sudo chown zpark:zpark -R /opt/module
(d)將hadoop104中/etc/profile文件拷貝到hadoop102的/etc/profile上。
[zpark@hadoop104 ~]$ sudo scp hadoop104:/etc/profile
hadoop102:/etc/profile
(e)將hadoop104中/etc/profile文件拷貝到hadoop103的/etc/profile上。
[zpark@hadoop104 ~]$ sudo scp hadoop104:/etc/profile
hadoop103:/etc/profile
(f)將hadoop104中/etc/profile文件拷貝到hadoop104的/etc/profile上。
[zpark@hadoop104 ~]$ sudo scp hadoop104:/etc/profile
hadoop104:/etc/profile
注意:拷貝過來的配置文件別忘了source一下/etc/profile
2. rsync 遠程同步工具
rsync主要用於備份和鏡像。具有速度快、避免複製相同內容和支持符號鏈接的優點。
rsync和scp區別:用rsync做文件的複製要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都複製過去。
(1)基本語法
rsync -av $pdir/$fname $user@hadoop$host:$pdir/$fname
命令 選項參數 要拷貝的文件路徑/名稱 目的用戶@主機:目的路徑/名稱
選項參數說明
選項 | 功能 |
---|---|
-a | 歸檔拷貝 |
-v | 顯示覆制過程 |
(2)案例實操
(a)把hadoop104機器上的/opt/software目錄同步到hadoop102服務器的root用戶下的/opt/目錄
[zpark@hadoop104 opt]$ rsync -av /opt/software/
hadoop102:/opt/software
3. xsync集羣分發腳本
(1)需求:循環複製文件到所有節點的相同目錄下
(2)需求分析:
(a)rsync命令原始拷貝:
rsync -av /opt/module root@hadoop103:/opt/
(b)期望腳本:
xsync要同步的文件名稱
(c)說明:在/home/zpark/bin這個目錄下存放的腳本,zpark用戶可以在系統任何地方直接執行。
(3)腳本實現
(a)在根目錄下創建xsync目錄,並在bin目錄下xsync創建文件,文件內容如下:
[zpark@hadoop102 ~]$ vi 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 -av $pdir/$fname $user@hadoop$host:$pdir
done
(b)修改腳本 xsync 具有執行權限
[zpark@hadoop102 ~]$ chmod +x xsync
(c)將xsync分發到hadoop105、hadoop106
(d)查看hadoop105、hadoop106
(e)把Hadoop3.1.2拷貝到hadoop105、hadoop106裏
[zhangyong@hadoop104 module]$ xsync hadoop-3.1.2/
(f)把 jdk1.8.0_181拷貝到hadoop105、hadoop106裏
[zhangyong@hadoop104 module]$ xsync jdk1.8.0_181/
(g)把配置文件拷貝到hadoop105、hadoop106裏