Hadoop详解(五):HDFS HA 和 Federation
1. Hadoop 2.0 產(chǎn)生背景
- Hadoop 1.0中HDFS和MapReduce在高可用、擴展性等方面存在問題
- HDFS存在的問題
- NameNode單點故障,難以應(yīng)用于在線場景 HA
- NameNode壓力過大,且內(nèi)存受限,影擴展性 Federation
- MapReduce存在的問題響
- JobTracker訪問壓力大,影響系統(tǒng)擴展性
- 難以支持除MapReduce之外的計算框架,比如Spark、Storm等
2. Hadoop 1.x 和Hadoop 2.x
Hadoop 2.x由HDFS、MapReduce和YARN三個分支構(gòu)成:
- 離線計算,基于磁盤I/O計算
2.1 HDFS 2.x
- 解決HDFS 1.0中單點故障和內(nèi)存受限問題。
- 解決單點故障
- HDFS HA:通過主備NameNode解決
- 如果主NameNode發(fā)生故障,則切換到備NameNode上
- 解決內(nèi)存受限問題
- HDFS Federation(聯(lián)邦)
- 水平擴展,支持多個NameNode;
- (2)每個NameNode分管一部分目錄;
- (1)所有NameNode共享所有DataNode存儲資源
- 2.x僅是架構(gòu)上發(fā)生了變化,使用方式不變
- 對HDFS使用者透明
- HDFS 1.x中的命令和API仍可以使用
3. HDFS 2.x Federation(聯(lián)邦)
通過多個namenode/namespace把元數(shù)據(jù)的存儲和管理分散到多個節(jié)點中,使到namenode/namespace可以通過增加機器來進行水平擴展。
能把單個namenode的負載分散到多個節(jié)點中,在HDFS數(shù)據(jù)規(guī)模較大的時候不會也降低HDFS的性能。可以通過多個namespace來隔離不同類型的應(yīng)用,把不同類型應(yīng)用的HDFS元數(shù)據(jù)的存儲和管理分派到不同的namenode中。
4. HDFS 2.x HA(高可用)
主備NameNode
Hadoop HA主要是解決NameNode單點故障問題,主NameNode對外提供服務(wù),備NameNode同步主NameNode元數(shù)據(jù),以待切換。所有DataNode同時向兩個NameNode匯報數(shù)據(jù)塊信息(位置)。并且在Hadoop HA中還含有JNN集群用來存儲共享存儲狀態(tài)(shared edits文件)。處于StandyBy節(jié)點的NameNode,主要作用是完成了edits.log文件的合并產(chǎn)生新的image,推送回給Active NameNode。該步驟和SecondaryNameNode的備份功能類似,通過這種方式保證了StandyBy節(jié)點的NameNode和Actvie NameNode的fsimage文件一致。edit文件通過JNN集群存儲共享存儲狀態(tài),active namenode處理所有的操作請求(讀寫),讀寫入到這個共享狀態(tài)的集群節(jié)點。
HDFS HA保持NameNode元數(shù)據(jù)信息一致,也就是說保持fsimge和edits文件保持一致。fsimge和edits文件在HDFS 格式化之后產(chǎn)生。
Hadoop的元數(shù)據(jù)主要作用是維護HDFS文件系統(tǒng)中文件和目錄相關(guān)信息。元數(shù)據(jù)的存儲形式主要有3類:內(nèi)存鏡像、磁盤鏡像(FSImage)、日志(EditLog)。在Namenode啟動時,會加載磁盤鏡像到內(nèi)存中以進行元數(shù)據(jù)的管理,存儲在NameNode內(nèi)存;磁盤鏡像是某一時刻HDFS的元數(shù)據(jù)信息的快照,包含所有相關(guān)Datanode節(jié)點文件塊映射關(guān)系和命名空間(Namespace)信息,存儲在NameNode本地文件系統(tǒng);日志文件記錄client發(fā)起的每一次操作信息,即保存所有對文件系統(tǒng)的修改操作,用于定期和磁盤鏡像合并成最新鏡像,保證NameNode元數(shù)據(jù)信息的完整,存儲在NameNode本地和共享存儲系統(tǒng)(QJM)中。
4.1 共享存儲(shared edits)
active namenode處理所有的操作請求(讀寫),standby namenode只同步狀態(tài)datanode會同時向兩個namenode發(fā)送block報告和心跳當滿足一次checkpoint時,standby namenode進行一次合并操作active NN執(zhí)行任何命名空間的修改都會持久化到一半以上的journalnodes上而Standby NN負責觀察edits log的變化,它能夠讀取從JNs中讀取edits信息,并更新其內(nèi)部的命名空間一旦Active NN出現(xiàn)故障,Standby NN將會保證從JNs中讀出了全部的Edits,然后切換成Active狀態(tài)一次checkpoint過程
4.2 切換機制
- 手動切換:通過命令實現(xiàn)主備之間的切換,可以用HDFS升級等場合
- 自動切換:基于Zookeeper實現(xiàn)
基于Zookeeper自動切換方案
- ZooKeeper Failover Controller:監(jiān)控NameNode健康狀態(tài),
- 當NameNode啟動時,會向Zookeeper注冊NameNode
- NameNode掛掉后,ZKFC為NameNode競爭鎖,獲得ZKFC 鎖的NameNode變?yōu)閍ctive
總結(jié)
以上是生活随笔為你收集整理的Hadoop详解(五):HDFS HA 和 Federation的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 大数据:Hive和Hbase的区别于优势
- 下一篇: Hadoop详解(七):YARYN完全分