Hadoop的運行模式
本地運行:在一臺單機上運行,沒有分布式文件系統,直接讀寫本地操作系統的文件系統。特點:不對配置文件進行修改,Hadoop 不會啟動?
偽分布式:也是在一臺單機上運行,但用不同的 Java 進程模仿分布式運行中的各類節點,特點:Hadoop 啟動的這些守護進程都在同一臺機器上運行,是相互獨立的 Java 進程。
完全分布式:數據存儲在HDFS,多臺服務器工作,企業中大量使用
要在本地去模擬這個真實的場景功能,我們需要做好如下的準備:
?1)準備3臺客戶機(關閉防火墻、靜態IP、主機名稱)
?2)安裝javaJDK,安裝Hadoop,并配置環境變量
3)配置集群
4)單點啟動
?5)配置ssh
?6)群起并測試集群
現在我們來看看按照JDK和Hadoop并配置環境變量的工作。有兩種思路:
1. 每臺機器都去手動安裝一次(上傳jar包再去解壓)。
2. 把一臺機器裝好,把module 拷貝到其他的機器。這樣就不需要省略了上傳和解壓的工作了。
scp命令
基本語法
作用:可實現服務器與服務器之間的數據拷貝
scp ? ?-r ? ? ? ?$pdir/$fname ? ?$user@$host:$pdir/$fname
說明:
(1)-r: 表示遞歸拷貝。如果要拷貝的是文件夾,就把文件夾下的內容都拷貝
(2)$pdir/$fname: 要拷貝的文件路徑/名稱 ??
(3)$user@host:$pdir/$fname: 目的地用戶@主機:目的地路徑/名稱
注意:要輸入相應的賬號和密碼!
實例
背景
假設你已經:
(1)在兩臺虛擬機(hadoop100、hadoop101)都已經創建好了/opt/module,/opt/software兩個目錄
(2)在hadoop100這臺機器中已經安裝了jdk和hadoop。
目標
現在的目標是:要把hadoop100上的jdk文件夾拷貝到hadoop101中的相同的目錄下。
操作
我們一起看具體操作:
1. 啟動虛擬機。把hadoop100和hadoop101都啟動。
2. 進入到hadoop100
3. 命令:
scp -r /opt/module/jdk1.8.0_212/ ?root@hadoop101:/opt/module/jdk1.8.0_212/
三.scp命令———拓展使用
1、拉取。在hadoop101上,拉取hadoop100機器上的內容(如下左圖)。
1、推送。在hadoop100機器上,把文件推送到hadoop101機器上(如上右圖)。
2、搭橋。在hadoop101機器上,把hadoop100的文件傳遞到hadoop102上
任務1:
在hadoop102上,將hadoop101中/opt/module/hadoop-3.1.3目錄拷貝到hadoop102上。
分析:使用scp進行拉取
操作:
先登錄到hadoop2
使用命令:
scp -r root@hadoop101:/opt/module/hadoop-3.1.3 /opt/module/
任務2:
在hadoop101上操作,將hadoop100中/opt/module目錄下所有目錄拷貝到hadoop102上。
分析:使用scp進行搭橋
操作:
登錄hadoop101
使用命令:
scp -r root@hadoop100:/opt/module/* root@hadoop102:/opt/module
rsync
主要用于備份和鏡像
rsync和scp的區別是rsync只對差異文件做更新,而scp是把所有文件都復制過去。故rsync效率更高
1. 基本語法
rsync ? ?-av ? ? ? $pdir/$fname ? ? ? ? ? ? $user@$host:$pdir/$fname
語法說明:
(1)-a:歸檔拷貝,盡可能讓拷貝的文件之間保持一致。
(2)-v:顯示拷貝過程。
(3)$pdir/$fname: 要拷貝的文件路徑/名稱
(4)$user@host:$pdir/$fname: 目的地用戶@主機:目的地路徑/名稱
實操:
?rsync -av /opt/conf/ root@hadoop101:/opt/conf
第一步:在兩臺機器上準備文件。
在hadoop100的/opt/conf/ 新建1.txt, 2.txt, 3.txt, 4.txt
做一次同步。
[root@hadoop100 ]$ rsync -av /opt/conf/ root@hadoop101:/opt/conf/
它會在hadoop101上創建conf目錄。
第二步:在hadoop100中,添加新文件,5.txt, 6.txt, 7.txt
第三步:使用命令把新添加的文件同步到hadoop101中。
命令如下:
[root@hadoop100 ]$ rsync -av /opt/conf/ root@hadoop101:/opt/conf/
請特別注意目錄最后的尾/。有/表示拷貝這文件夾下的內容,沒有/表示會拷貝這個文件夾
xsync腳本集群之間的同步
在root目錄建立bin文件夾,在bin內建立xsync文件,并在文件中輸入腳本
chmod +x xsync
2.步驟
(1)在/root/bin目錄下創建xsync文件。在這個
(2)在該文件中編寫如下代碼。這個部分的代碼不需要會寫,能看懂,了解即可。
#!/bin/bash
#1. 判斷參數個數
if [ $# -lt 1 ]
then
? ? echo Not Enough Arguement!
? ? exit;
fi
#2. 遍歷集群所有機器
for host in hadoop100 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/$fname $host:$pdir
? ? ? ? ? ? else
? ? ? ? ? ? ? ? echo $file does not exists!
? ? ? ? fi
? ? done
done
?(3)修改執行權限。此時,我們去查看文件,可以看到它的顏色是灰色的,不具備執行權限(如下圖)
接下來要通過命令: chmod +x xsync(或者是chmod 777 xsync)
重新查看它的顏色,它現在已經變成執行的腳本了(如下圖)。
(4)測試使用。把這個腳本同步到其他的機器中。
[root@hadoop100 ~]$ xsync /root/bin/
[課后小答]
scp的作用是什么?
如果當前在A機器上,要把A機器上的/etc/tst下的所有內容拷貝到B機器上的/etc/tst目錄下,應該的命令應該怎么寫?
rsync與scp的區別是什么?
答案:
1.實現服務器和服務器之間數據拷貝
2.scp -r /etc/tst/B機器的用戶名@主機名:/etc/tst
3.rsync和scp區別是:rsync只對差異文件做更新,而scp是把所有文件都復制過去,所以它的效果更高一些。