1. 程式人生 > 實用技巧 >Hadoop HDFS 叢集的分散式搭建

Hadoop HDFS 叢集的分散式搭建

Hadoop叢集的HA

1、簡介

HA模式解決單點故障問題,

2、規劃


NN-1 NN-2 DN ZK ZKFC JNN
Node1 * * *
Node2 * * * * *
Node3 * * *
Node4 * *

ZK: zookeeper

ZKFC: failover controller【故障轉移程序】

2.1、祕鑰

給配置ZKFC兩個節點做免祕鑰登入。

【這裡我就不做過多的介紹了】

2.2、架構

在典型的HA群集中,將兩個單獨的計算機配置為NameNode。在任何時間點,一個NameNode都恰好處於Active狀態,而另一個Node 處於Standby

狀態。Active NameNode負責叢集中的所有客戶端操作,而Standby只是充當從屬,並保持足夠的狀態以在必要時提供快速故障轉移。

為了使備用節點保持其狀態與活動節點同步,兩個節點都與一組稱為“ JournalNodes”(JN)的單獨守護程式進行通訊。當活動節點執行任何名稱空間修改時,它會持久地將修改記錄記錄到大多數這些JN中。Standby節點能夠從JN讀取編輯,並一直在監視它們以檢視編輯日誌的更改。當“備用節點”看到編輯內容時,會將其應用於自己的名稱空間。發生故障轉移時,備用資料庫將確保在將自身升級為活動狀態之前,已從JounalNodes讀取所有編輯內容。這樣可確保在發生故障轉移之前,名稱空間狀態已完全同步。

為了提供快速的故障轉移,備用節點還必須具有有關叢集中塊位置的最新資訊。為了實現這一點,DataNodes被配置了兩個NameNodes的位置,並向兩者傳送塊位置資訊和心跳訊號。

對於HA群集的正確操作至關重要,一次只能有一個NameNode處於活動狀態。否則,名稱空間狀態將在兩者之間迅速分散,從而有資料丟失或其他不正確結果的風險。為了確保此屬性並防止所謂的“裂腦情況”,JournalNode將僅一次允許單個NameNode成為作者。在故障轉移期間,將變為活動狀態的NameNode將僅承擔寫入JournalNodes的角色,這將有效地防止另一個NameNode繼續處於活動狀態,從而使新的Active可以安全地進行故障轉移

2.3、環境

為了部署高可用性群集,您應該準備以下內容:

  • NameNode計算機 -執行活動NameNode和Standby NameNode的計算機應具有彼此等效的硬體,以及與非HA群集中將使用的硬體相同的硬體。
  • JournalNode計算機 -執行JournalNode的計算機。JournalNode守護程式相對較輕,因此可以合理地將這些守護程式與其他Hadoop守護程式(例如NameNodes,JobTracker或YARN ResourceManager)並置在計算機上。注意:必須至少有3個JournalNode守護程式,因為必須將編輯日誌修改寫入大多數JN。這將允許系統容忍單個計算機的故障。您可能還會執行3個以上的JournalNode,但是為了實際增加系統可以容忍的故障數量,您應該執行奇數個JN(即3、5、7等)。請注意,當與N個JournalNode一起執行時,系統最多可以容忍(N-1)/ 2個故障,並繼續正常執行。

請注意,在HA群集中,備用NameNode也執行名稱空間狀態的檢查點,因此不必在HA群集中執行Secondary NameNode,CheckpointNode或BackupNode。實際上,這樣做將是一個錯誤。這還允許重新配置未啟用HA的HDFS群集的使用者啟用HA,以重用他們先前專用於次要NameNode的硬體。

2.4、部署方式

與聯合身份驗證配置類似,高可用性配置向後相容,並允許現有的單個NameNode配置無需更改即可工作。設計新的配置,以便群集中的所有節點都可以具有相同的配置,而無需根據節點的型別將不同的配置檔案部署到不同的計算機。

像HDFS聯合身份驗證一樣,HA群集重用名稱服務ID來標識實際上可能由多個HA NameNode組成的單個HDFS例項。此外,HA還添加了一個名為NameNode ID的新抽象。群集中的每個不同的NameNode都有一個不同的NameNode ID來區分它。為了支援所有NameNode的單個配置檔案,相關的配置引數字尾有nameservice ID和NameNode ID。

要配置HA NameNode,必須將多個配置選項新增到hdfs-site.xml配置檔案中。

設定這些配置的順序並不重要,但是為dfs.nameservices和dfs.ha.namenodes。[nameservice ID]選擇的值將確定後面的金鑰。因此,您應該在設定其餘配置選項之前決定這些值。

dfs.nameservices-此新名稱服務的邏輯名稱

為這個名稱服務選擇一個邏輯名,例如“mycluster”,然後使用這個邏輯名作為這個配置選項的值。您選擇的名稱是任意的。它將用於配置和作為叢集中絕對HDFS路徑的權威元件。

使用逗號分隔的NameNode id列表進行配置。datanode將使用它來確定叢集中的所有namenode。例如,如果您以前使用“mycluster”作為nameservice ID,並且希望使用“nn1”和“nn2”作為namenode的單獨ID,那麼您可以這樣配置它:

<property>
  <name>dfs.ha.namenodes.mycluster</name>
  <value>nn1,nn2</value>
</property>