大數(shù)據(jù)面試 | 02 HDFS難點(diǎn)---HDFS 聯(lián)邦和HDFS HA

目錄

HDFS F

HDFS HA

為了解決HDFS1.0 中單點(diǎn)故障問題和內(nèi)存受問題。提出了HDFS HA 和HDFS F。

解決單點(diǎn)故障問題:
  • HDFS HA: 通過NameNode 解決
  • 如果 NameNode 發(fā)生故障,就切換到備用NameNode
解決內(nèi)存受限問題:
  • HDFS Federation
  • 水平擴(kuò)展,支持多個NameNode
  • 所有的NameNode 共享所有的DataNode存儲資源
  • 每一個NameNode 分管一部分目錄

1. HDFS F

聯(lián)邦 HDFS 是 namenode 水平擴(kuò)展方案。聯(lián)邦 HDFS 允許每個 namenode之間的命名空間相互獨(dú)立。數(shù)據(jù)塊池不再切分,所以每個DataNode 需要注冊到每個 namenode。

HDFS 的底層存儲是可以水平拓展的(底層存儲指的是 datanode,當(dāng)集群存儲 空間不夠時,可簡單的添加機(jī)器以進(jìn)行水平拓展),但 namespace 不可以。 當(dāng)前的 namespace 只能存放在單個 namenode 上,而 namenode 在內(nèi)存中存儲了整個分布式文件系統(tǒng)中的元數(shù)據(jù)信息,這限制了集群中數(shù)據(jù)塊,文件和目錄的數(shù)目。

1.多個 NN 共用一個集群 DN 的存儲資源,每個 NN 都可以單獨(dú)對外??供服 務(wù)。
2.每個 NN 都會定義一個存儲池,有單獨(dú)的 id,每個 DN 都為所有存儲池??供 存儲。
3.DN 會按照存儲池 id 向其對應(yīng)的 NN 匯報塊信息,同時,DN 會向所有 NN 匯 報本地存儲可用資源情況。
4.如果需要在客戶端方便的訪問若干個 NN 上的資源,可以使用客戶端掛載 表,把不同的目錄映射到不同的 NN,但 NN 上必須存在相應(yīng)的目錄。

2.HDFS HA

HA.png

HA 的 namenode 主要分為共享 editLog 機(jī)制和 ZKFC 對 namenode 狀態(tài)的控
制。

  1. 集群中存在多個 namenode,這些 namenode 都有狀態(tài),分為 active 和 standby 狀態(tài)。
  2. 然后各個 namenode 之間通過共享文件系統(tǒng)存儲編輯日志文件。active master 將信息寫入共享存儲系統(tǒng),而 standby master 則讀取該信息以保持與 active master 的同步,從而減少切換時間。
  3. 此外,datanode 還需同時向各個 namenode 發(fā)送數(shù)據(jù)塊處理報告。
  4. 每一個 namenode 運(yùn)行著一個輕量級的故障轉(zhuǎn)移控制器 ZKFC。用于監(jiān)視和 控制 namenode 進(jìn)程。ZKFC 是基于 Zookeeper 實(shí)現(xiàn)的,啟動的時候會創(chuàng)建 HealthMonitor 和 ActiveStandbyElector 這兩個組件,創(chuàng)建的同時也會向 HealthMonitor 和 ActiveStandbyElector 注冊相應(yīng)的回調(diào)方法。

HealthMonitor:主要負(fù)責(zé)檢測 NameNode 的健康狀態(tài),如果檢測到 NameNode 的狀態(tài)發(fā)生變化,會回調(diào) ZKFailoverController 的相應(yīng)方法進(jìn)行自動的主備選舉。
ActiveStandbyElector:主要負(fù)責(zé)完成自動的主備選舉,內(nèi)部封裝了 Zookeeper 的處理邏輯,一旦 Zookeeper 主備選舉完成,會回調(diào) ZKFailoverController 的 相應(yīng)方法來進(jìn)行 NameNode 的主備狀態(tài)切換。


HA高可用.png
  1. HealthMonitor 初始化完成之后會啟動內(nèi)部的線程來定時調(diào)用對應(yīng) NameNode 的 HAServiceProtocol RPC 接口,對 NameNode 的健康狀態(tài)進(jìn)行 檢測。
  2. HealthMonitor 如果檢測到 NameNode 的健康狀態(tài)發(fā)生變化,會回調(diào) ZKFailoverController 注冊的相應(yīng)方法進(jìn)行處理。
  3. 如果 ZKFailoverController 判斷需要進(jìn)行主備切換,會首先使用 ActiveStandbyElector 來進(jìn)行自動的主備選舉。
  4. ActiveStandbyElector 與 Zookeeper 進(jìn)行交互完成自動的主備選舉。
  5. ActiveStandbyElector 與 Zookeeper 進(jìn)行交互完成自動的主備選舉完成后, 會回調(diào) ZKFailoverController 的相應(yīng)方法來通知當(dāng)前的 NameNode 成為主 NameNode 或備 NameNode.
  6. ZKFailoverController 調(diào)用對應(yīng) NameNode 的 HAServiceProtocol RPC 接口 的方法將 NameNode 轉(zhuǎn)換為 Active 狀態(tài)或 Standby 狀態(tài)。

Fencing(防御腦裂)實(shí)現(xiàn): Hadoop 公共庫中對外??供了兩種 fencing 實(shí)現(xiàn), 分別是 sshfence 和 shelllfence(缺省實(shí)現(xiàn)) ,其中 sshfence 是指通過 ssh 登陸 目標(biāo) Master 節(jié)點(diǎn)上,使用命令 kill 將進(jìn)程殺死(通過 tcp 端口號定位進(jìn)程 pid,該方法比 jps 命令更準(zhǔn)確);shellfence 執(zhí)行自定義腳本。

判斷是否腦裂: 自身故障,它會先刪除持久化節(jié)點(diǎn)然后再關(guān)閉。如果是腦裂的 話,它只是臨時節(jié)點(diǎn)消息,持久化還存在。 所以我們這邊可以通過判斷持久化 節(jié)點(diǎn)是否存在,來判斷是否是因?yàn)樽陨砉收稀?/p>

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容