文章目錄
- 1 預先說明
- 1.1 軟體版本說明
- 1.2 集群配置說明
- 2 集群規劃
- 3 搭建環境
- 3.1 修改組態檔
- 3.2 zookeeper 的安裝與配置
- 3.3 啟動測驗
1 預先說明
1.1 軟體版本說明
- 作業系統:CentOS-7-x86_64-DVD-1804.iso
- JDK:jdk-8u202-linux-x64.tar.gz
- Hadoop:hadoop-3.1.3.tar.gz
- zookeeper:apache-zookeeper-3.7.0-bin.tar.gz
1.2 集群配置說明
之前已經配置過 Hadoop 完全分布式運行模式(文章:【Hadoop 3】圖文詳解:搭建Hadoop完全分布式運行模式)本文將在其基礎上進行修改,從而搭建 HDFS 的高可用環境,
2 集群規劃
| hadoop102 | hadoop103 | hadoop104 | |
|---|---|---|---|
| NameNode DataNode JournalNode Jps DFSZKFailoverController QuorumPeerMain | DataNode JournalNode Jps QuorumPeerMain | NameNode DataNode JournalNode Jps DFSZKFailoverController QuorumPeerMain |
3 搭建環境
3.1 修改組態檔
1、修改 core-site.xml,配置 Hadoop 客戶端的默認路徑以使用新的啟用 HA 的邏輯 URI,如果之前使用“qf”作為名稱服務 ID,這將是所有 HDFS 路徑的授權部分的值,
(參考官方)



2、修改 hdfs-site.xml
(1)為此名稱服務選擇一個邏輯名稱(與上面的 core-site.xml 中 fd.defaultFS 屬性對應的 value 值對應),它將用于配置和集群中絕對 HDFS 路徑的權限組件,
(參考官方)


(2)使用逗號分隔的 NameNode ID 串列進行配置,DataNode 將使用它來確定集群中的所有 NameNode,并使用“nn1”和“nn2”作為 NameNode 的單個 ID,
(參考官方)


(3)配置每個 NameNode 監聽的完全限定的 RPC 地址,用于 NameNode 的內部通信地址,對于之前配置的兩個 NameNode ID,設定 NameNode 行程的完整地址和 IPC 埠,
(參考官方)


(4)配置每個 NameNode 監聽的完全限定的 HTTP 地址,用于 NameNode 的 web ui 的通信地址,與上面的 rpc-address 類似,設定兩個 NameNode 的 HTTP 服務器的地址以進行偵聽,
(參考官方)


(5)配置提供共享編輯存盤的 JournalNode 的地址,
(參考官方)


(6)指定 NameNode 失敗后進行自動切換的主類,


(7)出現 “腦裂” 后,采取某種方式殺死其中一個 NameNode;同時也要配置 shh 免密,不然會要求輸入密碼,將可能導致殺死失敗而且還有人工手動操作的麻煩;還可配置殺死超時時間,若超過此時間仍未殺死另一個處于 Active 的 NameNode,那么則報超時,
(參考官方)



(8)JournalNode 守護行程將存盤其本地狀態的路徑,即 JournalNode 的本地共享目錄,
(參考官方)


(9)配置自動故障轉移,
(參考官方)


注意,下圖是在 core-site.xml 中添加:

(10)將此配置分發給集群中的其他機器(此 xsync 腳本是封裝的 shell 命令,具體可參考之前搭建 hadoop 完全分布式環境的文章),

3.2 zookeeper 的安裝與配置
1、下載并解壓 zookeeper

2、配置環境變數


3、自定義 zoo.cfg 配置


(參考官方)
關于此配置,zookeeper 的官網也有詳細介紹:鏈接地址

4、分發 zookeeper 給其他客戶機
(1)分發 PATH 配置

(2)分發 Zookeeper
在 hadoop102 上:

在 hadoop103 上:

在 hadoop104 上:

(3)創建在 zoo.cfg 中 dataDir 屬性指定的目錄
也要在上面 dataDir 屬性指定的值中創建相應的目錄,用來存盤 zookeeper 的資料

也要講 zkdata 目錄分發給其他客戶機

(4)創建并配置 myid 檔案
在 hadoop102 上:


在 hadoop103 上:


在 hadoop104 上:


3.3 啟動測驗
1、在各節點上啟動 zookeeper(只要有半數以上的機器啟動 zookeeper 就可以發揮作用),啟動后,各節點都應該有 QuorumPeerMain 行程
(1)啟動 zookeeper
zkServer.sh start



(2)查看 zookeeper 運行情況



2、啟動 journalnode 服務,此時,各節點的 JournalNode 行程都應該已經啟動成功
sbin/hadoop-daemons.sh start journalnode




3、挑選兩個 NameNode 之中的一臺來格式化,然后啟動
(格式化方式可參考之前文章,但是,請注意,此處 HDFS 高可用環境下的 namenode 格式化要先啟動 zookeeper 和 journalnode:【Hadoop 3】集群管理:集群中結點的添加、洗掉(圖文總結))
hdfs namenode -format
4、將資料目錄復制到另一臺 NameNode 的機器(hadoop104)上

采取復制方式
scp -r data/ hadoop104:/opt/module/hadoop-3.1.3/
在 hadoop102 上執行復制操作,復制給另一臺配置 NameNode 行程的主機 hadoop104



hadoop104 上接收成功

5、格式化 zkfc
hdfs zkfc -formatZK

這時,連上 zookeeper server 后,會多出一個 hadoop-ha,里面是我們之前自定義的邏輯名 qf,而 qf 里暫時沒有內容,等我們啟動后,將會出現內容


6、啟動 hdfs
在 hadoop102 上:
sbin/start-dfs.sh
7、結果
在 hadoop102 上:

在 hadoop103 上:

在 hadoop104 上:

對比之前的規劃表,完全一致!
| hadoop102 | hadoop103 | hadoop104 | |
|---|---|---|---|
| NameNode DataNode JournalNode Jps DFSZKFailoverController QuorumPeerMain | DataNode JournalNode Jps QuorumPeerMain | NameNode DataNode JournalNode Jps DFSZKFailoverController QuorumPeerMain |
查看兩個 NameNode 的狀態情況,一切正常,


8、補充,完整組態檔內容
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<!-- 指定NameNode的地址 -->
<!--
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property> -->
<!--指定hdfs的命名空間-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://qf</value>
</property>
<!-- 指定hadoop資料的存盤目錄 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.3/data</value>
</property>
<!-- 配置HDFS網頁登錄使用的靜態用戶為atguigu -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop102:2181,hadoop103:2181,hadoop104:2181</value>
</property>
</configuration>
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
Licensed under the Apache License, Version 2.0 (the "License");
you may not use this file except in compliance with the License.
You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing, software
distributed under the License is distributed on an "AS IS" BASIS,
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
See the License for the specific language governing permissions and
limitations under the License. See accompanying LICENSE file.
-->
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.nameservices</name>
<value>qf</value>
</property>
<property>
<name>dfs.ha.namenodes.qf</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.qf.nn1</name>
<value>hadoop102:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.qf.nn2</name>
<value>hadoop104:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.qf.nn1</name>
<value>hadoop102:9878</value>
</property>
<property>
<name>dfs.namenode.http-address.qf.nn2</name>
<value>hadoop104:9878</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop102:8485;hadoop103:8485;hadoop104:8485/qf</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/opt/module/hadoop-3.1.3/data/journal/data</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.qf</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/zlc/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
<!-- deny node -->
<property>
<name>dfs.hosts.exclude</name>
<value>/opt/module/hadoop-3.1.3/etc/hadoop/zlc-datanode-deny.list</value>
</property>
</configuration>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/342149.html
標籤:其他
上一篇:Hadoop偽分布式的搭建:
下一篇:Kafaka基礎快速入門
