Hadoop完整搭建過程(三):完全分佈模式(虛擬機器)
1 完全分佈模式
完全分佈模式是比本地模式與偽分佈模式更加複雜的模式,真正利用多臺Linux主機來進行部署Hadoop
,對叢集進行規劃,使得Hadoop
各個模組分別部署在不同的多臺機器上,這篇文章介紹的是通過三臺虛擬機器進行叢集配置的方式,主要步驟為:
- 準備虛擬機器:準備虛擬機器基本環境
ip
+Host
配置:手動設定虛擬機器ip
以及主機名,需要確保三臺虛擬機器能互相ping
通ssh
配置:生成金鑰對後複製公鑰到三臺虛擬機器中,使其能夠實現無密碼相互連線Hadoop
配置:core-site.xml
+hdfs-site.xml
+workers
YARN
配置:yarn-site.xml
2 虛擬機器安裝
需要使用到三臺虛擬機器,其中一臺為Master
節點,兩臺Worker
節點,首先安裝虛擬機器並配置環境,最後進行測試。
2.1 映象下載
使用VirtualBox
進行虛擬機器的安裝,先去CentOS
官網下載最新版本的映象:
這裡有三種不同的映象:
boot
:網路安裝版dvd1
:完整版minimal
:最小化安裝版
這裡為了方便選擇最小化安裝版的,也就是不帶GUI
的。
2.2 安裝
下載後,開啟Virtual Box
並點選New
,選擇專家模式
:
命名為CentOSMaster
,作為Master
節點,並且分配記憶體,這裡是1G,如果覺得自己記憶體大的可以2G:
磁碟30G足夠,其他可以保持預設:
建立好後從設定中的儲存中,選擇下載的映象:
啟動後會提示選擇啟動盤,確定即可:
好了之後會出現如下提示畫面,選擇第一個安裝:
等待一會後進入安裝介面:
接下來對安裝位置以及時區進行配置,首先選擇安裝位置:
由於是虛擬的單個空磁碟,選擇自動分割槽即可:
時區這裡可以選擇中國的上海:
接著選擇網路,首先修改主機名為master
:
接著點選Configure
:
新增ip
地址以及DNS
伺服器,ip
地址可以參考本機,比如筆者的機器本地ip
為192.168.1.7
,則:
- 虛擬機器的
ip
可以填192.168.1.8
- 子網掩碼一般為
255.255.255.0
- 預設閘道器為
192.168.1.1
DNS
伺服器為114.114.114.114
(當然也可以換其他的公共DNS
比如阿里的223.5.5.5
、百度的180.76.76.76
等)
點選Save
後應用主機名並開啟:
沒問題的話就可以安裝了:
安裝的時候設定root
使用者的密碼以及建立使用者:
使用者這裡採用一個叫hadoopuser
的使用者,後面的操作都直接基於該使用者:
等待一段時間後安裝完成重啟即可。
2.3 啟動
在啟動之前首先把原來的映象去掉:
啟動後是黑框介面:
登入剛才建立的hadoopuser
使用者即可。
3 ssh
連線虛擬機器
預設的話是不能連線外網的,需要在選單欄中的Devices
中選擇Network
,設定為Bridged Adapter
(橋接模式):
使用ping
測試:
接著可以測試能否ping
通本地機器:
通了之後可以通過ssh
連線虛擬機器,像平時操作伺服器一樣,在本地終端中連線虛擬機器,首先新增指紋:
接著輸入密碼連線即可:
如果想偷懶可以使用金鑰連線的方式,在本地機器中:
ssh-keygen -t ed25519 -a 100
ssh-copy-id -i ~/.ssh/id_ed25519.pub [email protected]
4 基本環境搭建
基本環境搭建就是安裝JDK
以及Hadoop
,使用scp
上傳OpenJDK
以及Hadoop
。
4.1 JDK
首先去下載OpenJDK
,然後在本地機器上使用scp
上傳:
scp openjdk-11+28_linux-x64_bin.tar.gz [email protected]:/home/hadoopuser
接著在本地上切換到連線虛擬機器的ssh
中,
cd ~
tar -zxvf openjdk-11+28_linux-x64_bin.tar.gz
sudo mv jdk-11 /usr/local/java
下一步是編輯/etc/profile
,新增bin
到環境變數中,在末尾新增:
sudo vim /etc/profile
# 沒有vim請使用vi
# 或安裝:sudo yum install vim
# 新增
export PATH=$PATH:/usr/local/java/bin
然後:
. /etc/profile
測試:
4.2 Hadoop
Hadoop
的壓縮包scp
上傳到虛擬機器後,解壓並移動到/usr/local
:
scp hadoop-3.3.0.tar.gz [email protected]:/home/hadoopuser
虛擬機器ssh
終端:
cd ~
tar -xvf hadoop-3.3.0.tar.gz
sudo mv hadoop-3.3.0 /usr/local/hadoop
同時修改etc/hadoop/hadoop-env.sh
配置檔案,填入Java
路徑:
sudo vim /usr/local/hadoop/etc/hadoop/hadoop-env.sh
# 填入
export JAVA_HOME=/usr/local/java # 修改為您的Java目錄
5 克隆
因為需要一個Master
節點以及兩個Worker
節點,將Master
節點關機,並選擇配置好的CentOSMaster
,右鍵進行克隆:
並選擇完全克隆:
克隆出CentOSWorker1
以及CentOSWorker2
。
6 主機名+ip
設定
這裡的兩個Worker
節點以Worker1
以及Worker2
命名,首先操作Worker1
,修改主機名:
sudo vim /etc/hostname
# 輸入
# worker1
對於ip
,由於Master
節點的ip
為192.168.1.8
,因此這裡修改兩個Worker
的節點分別為:
192.168.1.9
192.168.1.10
sudo vim /etc/sysconfig/network-scripts/ifcfg-xxxx # 該檔案因人而異
# 修改IPADDR
IPADDR=192.168.1.9
修改完成後重啟Worker1
,對Worker2
進行同樣的修改主機名以及ip
操作。
7 Host
設定
需要在Master
以及Worker
節點進行Host
設定:
7.1 Master
節點
sudo vim /etc/hosts
# 新增
192.168.1.9 worker1 # 與上面的ip對應一致
192.168.1.10 worker2
7.2 Worker1
節點
sudo vim /etc/hosts
# 新增
192.168.1.8 master
192.168.1.10 worker2
7.3 Worker2
節點
sudo vim /etc/hosts
# 新增
192.168.1.8 master
192.168.1.9 worker1
7.4 互ping
測試
在三臺虛擬機器中的其中一臺ping
另外兩臺的ip
或者主機名,測試通過後就可以進行下一步了,這裡使用Worker1
節點測試:
8 配置ssh
8.1 sshd
服務
需要在三個節點(包括自身)之間配置ssh
無密碼(金鑰)連線,首先使用
systemctl status sshd
檢查sshd
服務是否開啟,沒開啟的使用
systemctl start sshd
開啟。
8.2 複製公鑰
三個節點都進行如下操作:
ssh-keygen -t ed25519 -a 100
ssh-copy-id master
ssh-copy-id worker1
ssh-copy-id worker2
8.3 測試
在其中一個節點中直接ssh
連線其他節點,無需密碼即可登入,比如在Master
節點中:
ssh master # 都是hadoopuser使用者,所以省略了使用者
ssh worker1
ssh worker2
9 Master
節點Hadoop
配置
在Master
節點中,修改以下三個配置檔案:
HADOOP/etc/hadoop/core-site.xml
HADOOP/etc/hadoop/hdfs-site.xml
HADOOP/etc/hadoop/workers
9.1 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/data/tmp</value>
</property>
</configuration>
fs.defaultFS
:NameNode
地址hadoop.tmp.dir
:Hadoop
臨時目錄
9.2 hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.name.dir</name>
<value>/usr/local/hadoop/data/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>/usr/local/hadoop/data/datanode</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
dfs.namenode.name.dir
:儲存FSImage
的目錄,存放NameNode
的metadata
dfs.datanode.data.dir
:儲存HDFS
資料的目錄,存放DataNode
的多個數據塊dfs.replication
:HDFS
儲存的臨時備份數量,有兩個Worker
節點,因此數值為2
9.3 workers
最後修改workers
,輸入(與上面設定的主機名一致):
worker1
worker2
9.4 複製配置檔案
把Master
節點的配置複製到Worker
節點:
scp /usr/local/hadoop/etc/hadoop/* worker1:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/* worker2:/usr/local/hadoop/etc/hadoop/
10 HDFS
格式化並啟動
10.1 啟動
在Master
節點中:
cd /usr/local/hadoop
bin/hdfs namenode -format
sbin/start-dfs.sh
執行後可以通過jps
命令檢視:
在Worker
節點中:
10.2 測試
瀏覽器輸入:
master:9870
# 如果沒有修改本機Host可以輸入
# 192.168.1.8:9870
但是。。。
本以為做了這麼多能看到成果了。
然後檢查過了一遍本機+虛擬機器Host
,還有Hadoop
的配置檔案,都沒有問題。
最後,
才定位到問題是
防火牆。
10.3 防火牆
CentOS8
預設開啟了防火牆,可以使用:
systemctl status firewalld
檢視防火牆狀態。
由於是通過9870
埠訪問,首先查詢9870
是否開放,Master
節點中輸入:
sudo firewall-cmd --query-port=9870/tcp
# 或
sudo firewall-cmd --list-ports
如果輸出為no
:
則表示沒有開放,手動開放即可:
sudo firewall-cmd --add-port=9870/tcp --permanent
sudo firewall-cmd --reload # 使其生效
再次在瀏覽器輸入:
master:9870
# 如果沒有修改本地Host
# 192.168.1.8:9870
可以看到一個友好的頁面了:
但是,有一個問題就是這裡沒有顯示Worker
節點,上圖中的Live Nodes
數目為0 ,而Datanodes
這裡什麼也沒有顯示:
但是在Worker
節點中的確可以看到有Datanode
的程序了:
檢視Worker
節點的日誌(/usr/local/hadoop/logs/hadoop-hadoopuser-datanode-worker1.log
)可以看到應該是Master
節點9000
埠的沒有開啟的問題:
回到Master
節點,先執行stop-dfs.sh
關閉,並開放9000
埠後執行start-dfs.sh
開啟:
/usr/local/hadoop/sbin/stop-dfs.sh
sudo firewall-cmd --add-port=9000/tcp --permanent
sudo firewall-cmd --reload
/usr/local/hadoop/sbin/start-dfs.sh
再次在瀏覽器訪問:
master:9000
# 或
# 192.168.1.8:9000
這時候就可以看見Worker
節點了:
11 配置YARN
11.1 YARN
配置
在兩個Worker
節點中修改/usr/local/hadoop/etc/hadoop/yarn-site.xml
:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
11.2 開啟YARN
Master
節點中開啟YARN
:
cd /usr/local/hadoop
sbin/start-yarn.sh
同時開放8088
埠為下面的測試做準備:
sudo firewall-cmd --add-port=8088/tcp --permanent
sudo firewall-cmd --reload
11.3 測試
瀏覽器輸入:
master:8088
# 或
# 192.168.1.8:8088
應該就可以訪問如下頁面了:
同樣道理沒有看到Worker
節點,檢視Worker
節點的日誌,發現也是埠的問題:
Master
節點先關閉YARN
,開放8031
埠,並重啟YARN
:
/usr/local/hadoop/sbin/stop-yarn.sh
sudo firewall-cmd --add-port=8031/tcp --permanent
sudo firewall-cmd --reload
/usr/local/hadoop/sbin/start-yarn.sh
再次訪問:
master:8088
# 或
# 192.168.1.8:8088
就可以看到Worker
節點了:
至此,虛擬機器組成Hadoop
叢集正式搭建完成。