5,Hadoop2.0 HA

Hadoop2.0產生的原因

HDFS存在的兩個問題:

1,NameNode單點故障,難以應用於在線場景

2,NameNode壓力過大,且內存受限,影響擴展性。

 

Hadoop  2.0產生背景

Hadoop 1.0中HDFS和MapReduce在高可用、擴展性等方面存在問題

HDFS存在的問題

NameNode單點故障,難以應用於在線場景    HA

NameNode壓力過大,且內存受限,影響系統擴展性   Federation

MapReduce存在的問題

JobTracker訪問壓力大,影響系統擴展性

難以支持除MapReduce之外的計算框架,比如Spark、Storm等

 

Hadoop 2.x由HDFS、MapReduce和YARN三個分支構成;

HDFS:NN Federation(聯邦)、HA;

2.X:只支持2個節點 HA,3.0實現了一主多從

MapReduce:運行在YARN上的MR;

離線計算,基於磁盤I/O計算

YARN:資源管理系統

HDFS  2.x

解決HDFS 1.0中單點故障和內存受限問題。

解決單點故障

HDFS HA:通過主備NameNode解決

如果主NameNode發生故障,則切換到備NameNode上

解決內存受限問題

HDFS Federation(聯邦)

水平擴展,支持多個NameNode;

(2)每個NameNode分管一部分目錄;

(1)所有NameNode共享所有DataNode存儲資源

2.x僅是架構上發生了變化,使用方式不變

對HDFS使用者透明

HDFS 1.x中的命令和API仍可以使用

 

HA情況:

在1.x中的時候一個叫NameNode一個叫SecondaryNameNode,SecondaryNameNode沒有對外提供服務的能力,只是合成edits log和Fsimage。

 

在2.x中的時候,一個叫active NameNode 一個叫standby NameNode,一主和一備。這兩個的配置必須一模一樣,誰是主誰是備已經不那麼重要了,但是只能有一個主。如果active掛掉了,那麼standby的NameNode的狀態可以被人爲手動的提升成active去提供服務。

爲了便於講解清楚我個人將NameNode中元數據分爲兩類:

  1. 靜態元數據(相對靜態,,會做持久化)比如目錄樹結構,路徑,文件名文件大小,持有者,偏移量等與客戶端增刪改交互的一些信息.
  2. 動態元數據(與DataNode交互的一些信息,不會做持久化)集羣啓動時NameNode與DataNode通信時做心跳DataNode彙報上來的。

做HA高可用意爲這其中一臺NameNode壞了另外一臺NameNode可以接手服務。那麼兩臺NameNode中元數據應該儘量一模一樣,靜態元數據是來自客戶端的增刪改操作記錄的信息,動態元數據來自DataNode的彙報。

動態元數據如何保持一致:

如上圖下面的兩個綠色箭頭所示,動態元數據可以由DataNode同時向兩臺NameNode彙報,但是由於客戶端只於active的NameNode保持通信,靜態元數據standby這臺NameNode應該如何同步過來呢?

靜態元數據如何保持一致:

引入一個新概念:NFS (NetWork File System)網絡文件系統,但是NFS是單點的,因此

如上圖所示用一個JN(journalnode)集羣來實現兩個NameNode之間的靜態元數據的同步。兩個NameNode都指向JN集羣中的fsimage和edits log文件目錄,但是在某一時刻,應該是active的NameNode寫入,standby的NameNode讀出。

至此兩個NameNode中的元數據就保持了一致。任意一方掛了,另一方切換狀態即可提供服務。

自動化HA:將這種主備切換的事情交給計算機做,原則:當想去解決一個問題的時候不要再引入一個新的問題。比如此時就不能將這個主備切換的問題交給一臺服務器控制,因爲一臺服務器也容易有單點故障的可能。不能爲了解決這個問題而引入一個新的問題,因此採用的是集羣技術三個結點或者更多結點。Zookeeper分佈式協調服務來解決自動化切換(與keepalive類似,但是有差異)。

如上圖,兩個NameNode所在的服務器中分別有一個控制器,控制器會精準的判斷NameNode的存活。集羣關掉,同一時刻開啓兩個NameNode,同時兩個控制器就也啓動起來了,控制器首先分別與所在結點的NameNode通信判斷NameNode是否存活。當兩者都判斷存活時,由於一個集羣只能有一個active,在某一個結點下二者競爭看哪個能在ZK上優先創建一個結點,那麼這個NameNode就是active。

HDFS  2.0  HA

主備NameNode

解決單點故障(屬性,位置)

主NameNode對外提供服務,備NameNode同步主NameNode元數據,以待切換

所有DataNode同時向兩個NameNode彙報數據塊信息(位置)

JNN:集羣(屬性)

standby:備,完成了edits.log文件的合併產生新的image,推送回ANN

兩種切換選擇

手動切換:通過命令實現主備之間的切換,可以用HDFS升級等場合

自動切換:基於Zookeeper實現

基於Zookeeper自動切換方案

ZooKeeper Failover Controller:監控NameNode健康狀態,

並向Zookeeper註冊NameNode

NameNode掛掉後,ZKFC爲NameNode競爭鎖,獲得ZKFC 鎖的NameNode變爲active

HDFS  2.x  Federation

通過多個namenode/namespace把元數據的存儲和管理分散到多個節點中,使到namenode/namespace可以通過增加機器來進行水平擴展。

能把單個namenode的負載分散到多個節點中,在HDFS數據規模較大的時候不會也降低HDFS的性能。可以通過多個namespace來隔離不同類型的應用,把不同類型應用的HDFS元數據的存儲和管理分派到不同的namenode中。

 

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