HDFS架構演變之路

前言

Hadoop到目前爲止發展已經有10餘年,版本通過了無數次的更新迭代,目前業內你們把Hadoop大的 版本分爲Hadoop1,hadoop2,Hadoop3三個版本。安全

1 hadoop1

hadoop1版本剛出來的時候是爲了解決兩個問題:服務器

  • 海量數據如何存儲的問題
  • 海量數據如何計算的問題

Hadoop1的核心設計就是HDFS和Mapreduce。架構

2 HDFS1架構

HDFS1是一個主從式的架構,主節點只有一個叫NameNode。從節點有多個叫DataNode。框架

2.1 NameNode

  • 管理元數據信息(文件目錄樹):文件與Block塊,Block塊與DataNode主機的關係。
  • NameNode爲了快速響應用戶的操做請求,因此把元數據加載到了內存裏面。

2.2 DataNode

  • 存儲數據,把上傳的數據劃分紅爲固定大小的文件塊。(Hadoop1,默認是64M。Hadoop2,128M)
  • 爲了保證數據安全,每一個文件塊默認都有三個副本。

3 HDFS1的架構缺陷

雖然HDFS1當初設計出來能夠解決海量數據存儲的問題,但在使用的過程當中慢慢的出現了一些缺陷,其中主要爲如下兩點:oop

  • 單點故障問題
  • 內存受限問題

3.1 單點故障

單點故障顧名思義就是單個節點發生了問題,致使HDFS出現了致命的缺陷。咱們都知道HDFS集羣是有多個節點組成的,其中最爲重要的節點就是NameNode所在的節點。NameNode掌管着全部數據存儲的元數據信息。一旦NameNode發生故障則整個HDFS就不可用了。優化

3.1.1 高可用

那麼HDFS爲了解決這個問題,就提出了高可用的方案,意思就是多一個NameNode,當其中一個掛了或失去通信的時候,另一個能夠替代,從而維持HDFS的可用性,實現自動容災的功能。spa

爲了實現自動容災,能夠引入第三方框架集羣,這裏zookeeper就登場了。zookeeper在與NameNode進行通信的時候會建立一把鎖,持有這把鎖的NameNode則被看成active NameNode,另外備份的NameNode被看成standby NameNode。同時後臺還會起一個監聽的線程ZKFC來監測NameNode。一旦監測到active NameNode出現問題,則standby NameNode自動切換。線程

3.1.2 數據一致性問題

引入另一個NameNode就要考慮數據一致性的問題。當前的NameNode掛掉狀況下,高可用的NameNode頂上的時候如果與以前掛掉的NameNode元數據信息保存不一致的話,則會發生一些請求找不到對應數據的狀況。會讓咱們從主觀意識的數據缺失了。設計

3.1.3 JournalNode

那麼爲了不這一現象的發生就要保持數據的一致性。這裏HDFS引入了共享文件系統的概念,它會在後臺啓動必定數量的JournalNode進程(同步存儲元數據,壓力較小),組成一個共享的文件系統,存儲元數據(editlog)。固然journalNode自己也是實現高可用的。active NameNode將元數據實時寫入JournalNode,standby NameNode實時讀取元數據信息,從而維持active NameNode,standby NameNode二者元數據一致。進程

image.png

3.2 內存受限

高可用方案讓單點故障問題得以解決。也讓咱們知道了NameNode的重要性,咱們之因此能這麼快的經過NameNode檢索到存儲在DataNod的數據,是由於NameNode將元數據都讀取到內存中,檢索效率大大超於磁盤。

那麼隨着數據的日積月累,元數據的愈來愈龐大,NameNode的內存是否夠存在受限。答案是必定存在的,NameNode自己也是一臺服務器,裝配的內存確定是受限的。那麼當內存受限的時候,添加這臺的內存也是能夠臨時解決燃眉之急的。但卻治標不治本。咱們自己集羣由這麼多臺服務器組成,一臺節點的內存不夠用,能夠利用其餘的服務器內存來完成這數據的檢索。

因此,這裏HDFS就運用了聯邦機制(Federation)。

3.2.1 聯邦機制(Federation)

聯邦機制的原理就是將NameNode劃分爲不一樣的命名空間並進行編號(這裏能夠想像成計算機中的C,D,E盤等)。不一樣的命名空間之間互不干擾。在DataNode中建立目錄,此目錄對應命名空間的編號。由此,編號相同的數據由對應的命名空間進行管理。固然爲了不單點故障問題,依舊採用高可用方案。

image.png

HDFS2架構

由此,HDFS解決了單點故障和內存受限的問題,HDFS1也進入了HDFS2的時代,這也是咱們如今常用的版本,也是相對穩定版本。

  • HA方案(High Available)
解決HDFS1 NameNode單點故障問題。
  • 聯邦方案
解決了HDFS1 內存受限問題。

HDFS3架構

至於HDFS3是在HDFS2的基礎上優化了HA方案,並加入了糾刪碼的技術。

  • HA方案支持多個NameNode
  • 引入糾刪碼技術(EC)

HA方案的優化主要是支持了多個NameNode,使得生產環境更加可靠一些。
糾刪碼技術誕生的背景是因爲HDFS中3個副本的存儲開銷在某些場景下過大。例如一些冷數據的存儲3份副本對於成原本說就顯得有些浪費了。
所以,一個天然的改進是使用糾刪碼(EC)來代替副本,它提供了同等級別的容錯能力,並且存儲空間大大減小。在典型的糾刪碼(EC)設置中,存儲開銷不超過50% 。EC 文件的複製因子是無心義的。它老是1,不能經過 -setorp 命令更改。

有了糾刪碼技術的加入,故而HDFS3既提升了存儲效率的同時又保持住了數據的持久性的特色。

相關文章
相關標籤/搜索