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 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.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
集群正式搭建完成。