1. 程式人生 > 實用技巧 >Hadoop完整搭建過程(三):完全分佈模式(虛擬機器)

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地址可以參考本機,比如筆者的機器本地ip192.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節點的ip192.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.defaultFSNameNode地址
  • hadoop.tmp.dirHadoop臨時目錄

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的目錄,存放NameNodemetadata
  • dfs.datanode.data.dir:儲存HDFS資料的目錄,存放DataNode的多個數據塊
  • dfs.replicationHDFS儲存的臨時備份數量,有兩個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叢集正式搭建完成。

12 參考