1 完全分布模式
完全分布模式是比本地模式與偽分布模式更加復雜的模式,真正利用多台Linux主機來進行部署Hadoop,對集群進行規划,使得Hadoop各個模塊分別部署在不同的多台機器上,這篇文章介紹的是通過三台虛擬機進行集群配置的方式,主要步驟為:
- 准備虛擬機:准備虛擬機基本環境
ip+Host配置:手動設置虛擬機ip以及主機名,需要確保三台虛擬機能互相ping通ssh配置:生成密鑰對后復制公鑰到三台虛擬機中,使其能夠實現無密碼相互連接Hadoop配置:core-site.xml+hdfs-site.xml+workersYARN配置: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 hadoopuser@192.168.1.8
4 基本環境搭建
基本環境搭建就是安裝JDK以及Hadoop,使用scp上傳OpenJDK以及Hadoop。
4.1 JDK
首先去下載OpenJDK,然后在本地機器上使用scp上傳:
scp openjdk-11+28_linux-x64_bin.tar.gz hadoopuser@192.168.1.8:/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 hadoopuser@192.168.1.8:/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.9192.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.xmlHADOOP/etc/hadoop/hdfs-site.xmlHADOOP/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的metadatadfs.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集群正式搭建完成。
