1. 程式人生 > 實用技巧 >Hadoop完整搭建過程(四):完全分佈模式(伺服器)

Hadoop完整搭建過程(四):完全分佈模式(伺服器)

1 概述

上一篇文章介紹瞭如何使用虛擬機器搭建叢集,到了這篇文章就是實戰了,使用真實的三臺不同伺服器進行Hadoop叢集的搭建。具體步驟其實與虛擬機器的差不多,但是由於安全組以及埠等等一些列的問題,會與虛擬機器有所不同,廢話不多說,下面正式開始。

2 約定

  • Master節點的ipMasterIP表示,主機名用master表示
  • 兩個Worker節點的ipWorker1IP/Worker2IP表示,主機名用worker1/worker2表示
  • 這裡為了演示方便統一使用root使用者登入,當然生產環境不會這樣

3 (可選)本地Host

修改本地Host,方便使用主機名來進行操作:

sudo vim /etc/hosts
# 新增
MaterIP master
Worker1IP worker1
Worker2IP worker2

4 ssh

本機生成金鑰對後複製公鑰到三臺伺服器上:

ssh-keygen -t ed25519 -a 100 # 使用更快更安全的ed25519演算法而不是傳統的RSA-3072/4096
ssh-copy-id root@master
ssh-copy-id root@worker1
ssh-copy-id root@worker2

這時可以直接使用root@host進行連線了:

ssh root@master
ssh root@worker1
ssh root@worker2

不需要輸入密碼,如果不能連線或者需要輸入密碼請檢查/etc/ssh/sshd_config或系統日誌。

5 主機名

修改Master

節點的主機名為master,兩個Worker節點的主機名為worker1worker2

# Master節點
vim /etc/hostname
master
# Worker1節點
# worker1
# Worker2節點
# worker2

同時修改Host

# Master節點
vim /etc/hosts
Worker1IP worker1
Worker2IP worker2

# Worker1節點
vim /etc/hosts
MasterIP master
Worker2IP worker2

# Worker1節點
vim /etc/hosts
MasterIP master
Worker1IP worker1

修改完成之後需要互ping測試:

ping master
ping worker1
ping worker2

ping不通的話應該是安全組的問題,開放ICMP協議即可:

6 配置基本環境

6.1 JDK

scp上傳OpenJDK 11,解壓並放置於/usr/local/java下,同時修改PATH

export PATH=$PATH:/usr/local/java/bin

如果原來的伺服器裝有了其他版本的JDK可以先解除安裝:

yum remove java

注意設定環境變數後需要測試以下java,因為不同伺服器的架構可能不一樣:

比如筆者的Master節點為aarch64架構,而兩個Worker都是x86_64架構,因此Master節點執行java時報錯如下:

解決辦法是通過yum install安裝OpenJDK11

yum install java-11-openjdk

6.2 Hadoop

scp上傳Hadoop 3.3.0,解壓並放置於/usr/local/hadoop下,注意選擇對應的架構:

解壓後修改以下四個配置檔案:

  • etc/hadoop/hadoop-env.sh
  • etc/hadoop/core-site.xml
  • etc/hadoop/hdfs-site.xml
  • etc/hadoop/workers

6.2.1 hadoop-env.sh

修改JAVA_HOME環境變數即可:

export JAVA_HOME=/usr/local/java # 修改為您的Java目錄

6.2.2 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>

具體選項與虛擬機器方式的設定相同,這裡不再重複敘述。

6.2.3 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>

6.2.4 workers

worker1
worker2

6.2.5 複製配置檔案

# 如果設定了埠以及私鑰
# 加上 -P 埠 -i 私鑰
scp /usr/local/hadoop/etc/hadoop/* worker1:/usr/local/hadoop/etc/hadoop/
scp /usr/local/hadoop/etc/hadoop/* worker2:/usr/local/hadoop/etc/hadoop/

7 啟動

7.1 格式化HDFS

Master中,首先格式化HDFS

cd /usr/local/hadoop
bin/hdfs namenode -format

如果配置檔案沒錯的話就格式化成功了。

7.2 hadoop-env.sh

還是在Master中,修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh,末尾新增:

HDFS_DATANODE_USER=root
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

7.3 啟動

首先Master開放9000以及9870埠(一般安全組開放即可,如果開啟了防火牆firewalld/iptables則新增相應規則),並在Master節點中啟動:

sbin/start-dfs.sh

瀏覽器輸入:

MasterIP:9870

即可看到如下頁面:

如果看到Live Nodes數量為0請檢視Worker的日誌,這裡發現是埠的問題:

並且在配置了安全組,關閉了防火牆的情況下還是如此,則有可能是Host的問題,可以把Master節點中的:

# /etc/hosts
127.0.0.1 master

刪去,同樣道理刪去兩個Worker中的:

# /etc/hosts
127.0.0.1 worker1
127.0.0.1 worker2

8 YARN

8.1 環境變數

修改/usr/local/hadoop/etc/hadoop/hadoop-env.sh,新增:

export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

8.2 YARN配置

在兩個Worker節點中修改/usr/local/hadoop/etc/hadoop/yarn-site.xml

<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>master</value>
</property>

8.3 開啟YARN

Master節點中開啟YARN

cd /usr/local/hadoop
sbin/start-yarn.sh

同時Master的安全組開放8088以及8031埠。

8.4 測試

瀏覽器輸入:

MasterIP:8088

應該就可以訪問如下頁面了:

至此叢集正式搭建完成。

9 參考