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

1 - 爲什麼需要聯邦

單 NameNode 的架構存在的問題:當集羣中數據增長到一定規模後,NameNode 進程佔用的內存可能會達到成百上千 GB(調大 NameNode 的 JVM 堆內存已無可能),此時,NameNode 成了集羣的性能瓶頸。

爲了提高 HDFS 的水平擴展能力,提出了Federation(聯邦,聯盟)機制。

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

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

現有的 HDFS 可以簡單分爲 數據管理數據存儲 2層:

所有關於存儲數據的信息和管理,都是由 NameNode 負責;

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

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

2 - Federation 架構設計

再強調一遍:HDFS Federation 是用來解決 NameNode 內存瓶頸問題的橫向擴展方案。

Federation 意味着在集羣中將會有多個 NameNode,這些 NameNode 相互獨立且不需要協調,它們只需要管理自己所屬的數據塊即可。

分佈式的 DataNode 作爲公共的數據塊存儲設備,被所有的 NameNode 共用:每個 DataNode 都要向集羣中所有的 NameNode 註冊,且週期性地向所有 NameNode 發送心跳和塊報告,並執行所有 NameNode 下發的命令。

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 的單點故障問題 和 橫向擴容問題。

版權聲明

作者:瘦風(https://healchow.com)

出處:博客園-瘦風的南牆(https://www.cnblogs.com/shoufeng)

感謝閱讀,公衆號 「瘦風的南牆」 ,手機端閱讀更佳,還有其他福利和心得輸出,歡迎掃碼關注🤝

本文版權歸博主所有,歡迎轉載,但 [必須在頁面明顯位置標明原文鏈接],否則博主保留追究相關人士法律責任的權利。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章