-
(一)Hadoop的運行模式
一共有三種:
- 本地運行。
- 偽分布式
- 完全分布式
-
(二)Hadoop的完全分布式運行
-
要模擬這個功能,我們需要做好如下的準備。
1)準備3臺客戶機(關閉防火墻、靜態IP、主機名稱)
2)安裝JDK,并配置環境變量
3)安裝Hadoop,并配置環境變量
4)配置集群
5)單點啟動
6)配置ssh
7)群起并測試集群
其中,第1項我們在之前克隆虛擬機的環節中已經完成了。現在我們來看看按照JDK和Hadoop并配置環境變量的工作。有兩種思路:
1. 每臺機器都去手動安裝一次(上傳jar包再去解壓)。
2. 把一臺機器裝好,把module 拷貝到其他的機器。這樣就不需要省略了上傳和解壓的工作了。
(三)scp拷貝軟件到服務器
scp可以實現服務器與服務器之間的數據拷貝。
基本語法
scp????-r ???????$pdir/$fname ????????????$user@$host:$pdir/$fname
命令 ??遞歸 ????要拷貝的文件路徑/名稱 ??目的地用戶@主機:目的地路徑/名稱
來,我們一起看下案例實操。假設你在三臺虛擬機(hadoop102、hadoop103、hadoop104)都已經創建好的/opt/module,/opt/software兩個目錄,在hadoop102這臺機器中已經安裝了jdk和hadoop。現在需要把102上的jdk拷貝到103中。
具體操作是:
1. 啟動虛擬機
2. 進入到hadoop102。
3. 命令:scp -r /opt/module/jdk1.8.0_212??root@hadoop103:/opt/module
注意:這的hadoop103是虛擬機的名稱,如果沒有設置hosts則需要改成IP地址。
拓展:scp根據所在的位置不同命令也支持不同的操作,例如:
在A機器上,拉取B機器上的內容。
在A機器上,把文件傳到B機器上
在A機器上,把B機器上的文件傳遞到C機器上
(b)在hadoop103上,將hadoop102中/opt/module/hadoop-3.1.3目錄拷貝到hadoop103上。
scp -r root@hadoop102:/opt/module/hadoop-3.1.3 /opt/module/
(c)在hadoop103上操作,將hadoop102中/opt/module目錄下所有目錄拷貝到hadoop104上。
scp -r root@hadoop102:/opt/module/*?root@hadoop104:/opt/module
(四)rsync遠程同步-配置文件
rsync主要用于備份和鏡像。具有速度快、避免復制相同內容和支持符號鏈接的優點。
rsync和scp區別:用rsync做文件的復制要比scp的速度快,rsync只對差異文件做更新。scp是把所有文件都復制過去。
(1)基本語法
rsync ???-av ??????$pdir/$fname ????????????$user@$host:$pdir/$fname
命令 ??選項參數 ??要拷貝的文件路徑/名稱 ??目的地用戶@主機:目的地路徑/名稱
??選項參數說明
選項
功能
-a
歸檔拷貝
-v
顯示復制過程
(2)案例實操
(a)刪除hadoop103中/opt/module/hadoop-3.1.3/wcinput
[root@hadoop103 hadoop-3.1.3]$ rm -rf wcinput/
(b)同步hadoop102中的/opt/module/hadoop-3.1.3到hadoop103
[root@hadoop102 module]$ rsync -av hadoop-3.1.3/ root@hadoop103:/opt/module/hadoop-3.1.3/
(五)xsync集群分發腳本
(1)需求:循環復制文件到所有節點的相同目錄下
(2)需求分析:
(a)rsync命令原始拷貝:
rsync ?-av ????/opt/module ? ?root@hadoop103:/opt/
(b)期望腳本:
xsync要同步的文件名稱
(c)期望腳本在任何路徑都能使用(腳本放在聲明了全局環境變量的路徑)
[root@hadoop102 ~]$ echo $PATH
/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/root/.local/bin:/home/root/bin:/opt/module/jdk1.8.0_212/bin
(3)腳本實現
(a)在/home/root/bin目錄下創建xsync文件
[root@hadoop102?opt]$?cd /home/root
[root@hadoop102?~]$?mkdir bin
[root@hadoop102?~]$?cd bin
[root@hadoop102?bin]$?vim xsync
在該文件中編寫如下代碼
#!/bin/bash#1. 判斷參數個數 if [ $# -lt 1 ] thenecho Not Enough Arguement!exit; fi#2. 遍歷集群所有機器 for host in hadoop102 hadoop103 hadoop104 doecho ==================== $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/$fname $host:$pdirelseecho $file does not exists!fidone done
此時,我們去查看文件
顏色是灰色的,不具備執行權限。修改腳本 xsync 具有執行權限
chmod +x?xsync
或者是chmod 777 xsync
測試腳本
[root@hadoop102?~]$?xsync /home/root/bin
(d)將腳本復制到/bin中,以便全局調用
[root@hadoop102?bin]$?sudo cp?xsync /bin/
(e)同步環境變量配置(root所有者)
[root@hadoop102 ~]$ xsync /etc/profile.d/my_env.sh
(六)ssh命令切換主機讓環境變量生效
從當前主機切換到另一臺主機:ssh root@192.168.10.101
運行命令讓環境變量生效。
source /etc/profile