天天看點

HDFS 10 - HDFS 的聯邦機制(Federation 機制)

HDFS 的聯邦機制解決了 NameNode 的橫向擴容問題,具體原理是什麼樣的呢?一起學習下????

目錄

  • ​​1 - 為什麼需要聯邦​​
  • ​​2 - Federation 架構設計​​
  • ​​3 HDFS Federation 的不足​​
  • ​​版權聲明​​

1 - 為什麼需要聯邦

單 NameNode 的架構存在的問題:當叢集中資料增長到一定規模後,NameNode 程序占用的記憶體可能會達到成百上千 GB(調大 NameNode 的 JVM 堆記憶體已無可能),此時,NameNode 成了叢集的性能瓶頸。

為了提高 HDFS 的水準擴充能力,提出了Federation(聯邦,聯盟)機制。

Federation 是 NameNode 的 Federation,也就是會有多個 NameNode,而多個 NameNode 也就意味着有多個 namespac(命名空間),不同于 HA 模式下 Active 和 Standby 有各自的命名空間,聯邦環境下的多 NameNode 共享同一個 namespace。

來看一下命名空間在 HDFS 架構中的位置:

HDFS 10 - HDFS 的聯邦機制(Federation 機制)

現有的 HDFS 可以簡單分為 資料管理 和 資料存儲 2層:

所有關于存儲資料的資訊和管理,都是由 NameNode 負責;

而真實資料的存儲則是在各個 DataNode 下完成。

這些被同一個 NameNode 所管理的資料都在同一個 namespace 下,一個 namespace 對應一個Block Pool(所有資料塊的集合)。

2 - Federation 架構設計

再強調一遍:HDFS Federation 是用來解決 NameNode 記憶體瓶頸問題的橫向擴充方案。

Federation 意味着在叢集中将會有多個 NameNode,這些 NameNode 互相獨立且不需要協調,它們隻需要管理自己所屬的資料塊即可。

分布式的 DataNode 作為公共的資料塊儲存設備,被所有的 NameNode 共用:每個 DataNode 都要向叢集中所有的 NameNode 注冊,且周期性地向所有 NameNode 發送心跳和塊報告,并執行所有 NameNode 下發的指令。

HDFS 10 - HDFS 的聯邦機制(Federation 機制)

Federation 架構中,DataNode上 會有多個 Block Pool 下,在 DataNode 的 datadir 目錄下能看到以 ​

​BP-xx.xx.xx.xx​

​ 開頭的目錄。

從上圖可以看出來:

多個 NameNode 共用一個叢集裡的所有存儲資源,每個 NameNode 都可以單獨對外提供服務;

每個 NameNode 都會定義一個 Block Pool,有單獨的 id,每個 DataNode 都為所有 Block Pool 提供存儲。

DataNode 會按照存儲池 id 向其對應的 NameNode 彙報塊資訊,同時,DataNode 會向所有 NameNode 彙報本地存儲可用資源情況。

3 HDFS Federation 的不足

HDFS Federation 并沒有完全解決單點故障問題。

雖然叢集中有多個 NameNode(namespace),但是從單個 NameNode(namespace)看,仍然存在單點故障:

如果某個 NameNode 服務發生故障,其管理的檔案便不能被通路。

Federation 架構中每個NameNode 同樣配有一個 Secondary NameNode,用于協助 NameNode 管理中繼資料資訊(FSImage 和 EditLog)。

是以超大規模的叢集,一般都會采用 HA + Federation 的部署方案,也就是每個聯合的 NameNode 都是 HA 的,這樣就解決了 NameNode 的單點故障問題 和 橫向擴容問題。

版權聲明

作者:瘦風​

感謝閱讀,公衆号 ​​「瘦風的南牆」​​ ,手機端閱讀更佳

​​

HDFS 10 - HDFS 的聯邦機制(Federation 機制)
本文版權歸部落客所有,歡迎轉載,但 [必須在頁面明顯位置标明原文連結],否則部落客保留追究相關人士法律責任的權利。

繼續閱讀