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
應該就可以訪問如下頁面了:
至此集群正式搭建完成。