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 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節點的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 參考


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM