Hadoop完整搭建過程(四):完全分佈模式(伺服器)
1 概述
上一篇文章介紹瞭如何使用虛擬機器搭建叢集,到了這篇文章就是實戰了,使用真實的三臺不同伺服器進行Hadoop
叢集的搭建。具體步驟其實與虛擬機器的差不多,但是由於安全組以及埠等等一些列的問題,會與虛擬機器有所不同,廢話不多說,下面正式開始。
2 約定
Master
節點的ip
用MasterIP
表示,主機名用master
表示- 兩個
Worker
節點的ip
用Worker1IP
/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
節點的主機名為worker1
、worker2
:
# 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
應該就可以訪問如下頁面了:
至此叢集正式搭建完成。