Hadoop2.0集羣架構設計分析

衆所周知Hadoop2.0包括三個部分,分佈式存儲HDFS、資源調度YARN、分佈式計算MapReduce,而MapReduce是基於HDFS、YARN基礎之上進行的分佈式計算,HDFS和YARN搭建好分佈式集羣,MapReduce自然也就有了分佈式集羣環境,所以我們主要來說HDFS和YARN的集羣架構。

 

HDFS的集羣架構

HDFS有三個進程NN、SNN、DN,NN,Yarn是兩個進程RM、NM,每個進程都需要避免單點,保證高可用。

絕大多數大數據系統的架構都是一主多從的架構設計,主服務器只有一臺,掌控全局,因此保證HDFS中的主進程NameNode、YARN中的主進程ResourceManager做到高可用尤爲重要。

HDFS的HA架構圖如下

 

 

1、命名服務nameservice,HDFS的代理:

HA的架構設計中,我們設計了兩臺NameNode節點。對於客戶端訪問來說,HDFS是透明的,你有多少臺NameNode節點,客戶端並不關心,你HDFS只要保證一點,能讓我正常訪問HDFS系統就OK。但對於HDFS系統來說,兩個NameNode,你得選擇哪個提供給客戶端訪問,所以必須要有代理機制。

client訪問NN時,如果第一次訪問到standby節點,需要到其他NN節點上重試,直到訪問到active節點

 

2、ACTIVE NN: 對外提供服務,standby namenode保持備用狀態

ACTIVE NN主要 負責操作記錄寫到自己的editlog、同時寫JN集羣、接收DN的心跳和塊報告

 

3、standby namenode:

接收JN集羣的日誌,顯示讀取執行edit log操作(重演),使得自己的元數據和active nn節點保持一致。

接收所有datanodes的心跳和塊報告,因爲文件塊的映射關係是存在內存裏的,不是存在磁盤上的,因此datanodes必須向兩個namenodes同時彙報自己的存儲情況。

 

4、active/standby 兩個NameNode組成主備

ZKFC 單獨的進程 zookeeperfailovercontrol,和ZooKeeper進行交互的

通過ZKFC完成active選舉、standby到active的切換

監控NN監控健康狀態

向zk集羣定期發送心跳,使得自己可以被選舉;

當自己被zk選舉爲active的時候,zkfc進程通過RPC協議調用使NN節點的狀態變爲active

 

5、HDFS的 HA 環境部署

hadoop001:ZK    NN ZKFC  JN    DN

hadoop002:ZK    NN ZKFC  JN    DN

hadoop003:ZK                    JN    DN

 

詳細介紹下日誌同步這一塊,如何保證edit日誌文件的安全和完整

我們兩個NameNode節點,如果Active節點宕機,我Standby節點要接着繼續對服務,那麼這個正常對外服務源自與文件元數據的完整性,也就是說Active節點要實時非常安全、完整的記錄文件的操作日誌信息,這樣Standby在讀取的時候,讀取的日誌信息是完整的,當Active節點宕機,Standby才能接手繼續工作。

方案一:一個好的文件系統

找一臺比較好的服務器,作爲外部的文件存儲設備,Active節點的NameNode將edit日誌文件寫入,Standby節點的NameNode將讀取寫入的日誌文件。那麼這種方案需要好的企業級服務。成本上來說代價昂貴,與我們小成本、大集羣的分佈式理念相違背。

 

方案二:分佈式存儲日誌信息QJM

NameNode管理文件的元數據,包括fsimage和edits,在開始啓動的時候NameNode的Active節點和Standby節點元數據是一樣的。但是啓動之後,Active節點提供對外服務,那麼它的edits日誌文件在不停的變化,這個時候兩個NameNode節點上的日誌文件肯定是不一樣的。那麼就需要一種機制,保證Active節點的日誌安全的寫入某個地方,並且讓Standby節點能完整的讀取。

我們說HDFS文件的安全性和完整性是通過DataNode節點副本的方式來保證的,每一個文件的存儲默認至少是3份。那麼我們的edit日誌文件爲了保證安全性,也類似於DataNode文件的存儲方式,以2n+1副本的方式進行存儲。n表示允許損壞的機器節點數量。也就是說Active的NameNode節點將edit日誌存三份,允許其中一個節點寫入edit日誌失敗。那麼負責存儲edit日誌文件節點進程是誰呢?就是JournalNode。它的節點數必須是奇數。JournalNode負責管理edit日誌文件的安全性和完整性,從而達到NameNode的Active節點與Standby節點之間元數據的同步。

“use HDFS HA using the Quorum Journal Manager (QJM) to share edit logs between the Active and Standby NameNodes“這是官網的一句話。QJM,分佈式的日誌管理,節點名稱就是JournalNode。

active NameNode在向JournalNode寫數據過程,是同步寫入quorum 個JournalNode才成功返回,其餘JournalNode會做異步數據同步,和activemq集羣使用2n+1 leveldb做數據同步原理類似,都是爲了保證數據的可靠性。

所以一般架構設計中,還是採用QJM分佈式日誌存儲來達到兩個NameNode節點之間元數據的同步。

 

Yarn的集羣架構

 

1、和HDFS的區別

  • ZKFC是RM裏的一個線程,
  • 同步通過ZooKeeper,
  • NM不用和Standby RM同步

 

2、爲了HDFS的同步數據不使用ZooKeeper進行數據存儲?

相對而言,YARN 產生的作業信息要比HDFS產生的edit log量小,因爲ZooKeeper每次做寫操作都要進行選舉,性能比較低。

 

3、ZK的/rmstore目錄存儲lock、state信息。

RM啓動時候會向ZK的/rmstore目錄寫lock文件,寫成功就爲active,否則standby。

RM產生的狀態數據也是存儲在這個目錄下,當activeRM掛了,另外一個standby RM通過ZKFC選舉成功爲active,會從/rmstore讀取相應的作業信息。

 

4、YARN的 HA 環境部署

hadoop001:zk  rm(zkfc)  nm

hadoop002:zk  rm(zkfc)  nm

hadoop003:zk                nm

 

最後聊下大數據架構的兩個核心設計理念

  1. 移動計算比移動數據更划算

既然數據是龐大的,而程序要比數據小得多,將數據輸入給程序是不划算的,那麼就反其道而行之,將程序分發到數據所在的地方進行計算,也就是所謂的移動計算比移動數據更划算。

這就是爲什麼MapReduce的代碼會跑在和DataNode在同一臺機器上的原因。

  1. 一主多從的架構設計

傳統的應用,爲了分流要分而治之,而大數據恰恰相反,需要把數據的收集在一起,才能挖掘出潛在的數據價值 。

 

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