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