1.Hadoop2.0產(chǎn)生背景
早期的hadoop版本,NN(namenode)是HDFS集群的單點(diǎn)故障點(diǎn)赏壹,每一個(gè)集群只有一個(gè)NN,如果這個(gè)機(jī)器或進(jìn)程不可用,整個(gè)集群就無(wú)法 使用。為了解決這個(gè)問題颈抚,出現(xiàn)了一堆針對(duì)HDFS HA的解決方案( 如:Linux HA, VMware FT, shared NAS+NFS, BookKeeper, QJM/Quorum Journal Manager, BackupNode等 ); 在HA具體實(shí)現(xiàn)方法不同的情況下,HA框架的流程是一致的, 不一致的就是如何存儲(chǔ)和 管理日志胞皱。在Active NN和Standby NN之間要有個(gè)共享的存儲(chǔ)日志的地方邪意,Active NN把EditLog寫到這個(gè)共享的存儲(chǔ)日志的地方, Standby NN去讀取日志然后執(zhí)行反砌,這樣Active和Standby NN內(nèi)存中的HDFS元數(shù)據(jù)保持著同步雾鬼。一旦發(fā)生主從切換Standby NN可以盡快接 管Active NN的工作.
以上內(nèi)容摘自培訓(xùn)班老師文檔
2.Hadoop1.0與Hadoop2.0區(qū)別
SecondaryNameNode 主要是在Hadoop1.x中存在,而在2.x中是在沒有配置高可用的時(shí)候會(huì)存在宴树。
3.HDFS 2.x:解決HDFS 1.0中單點(diǎn)故障和內(nèi)存受限問題
- 解決單點(diǎn)故障
HDFS HA:通過主備NameNode解決
如果主NameNode發(fā)生故障策菜,則切換到備NameNode上
- 解決內(nèi)存受限問題
HDFS Federation(聯(lián)邦)
水平擴(kuò)展,支持多個(gè)NameNode酒贬;
每個(gè)NameNode分管一部分目錄又憨;
所有NameNode共享所有DataNode存儲(chǔ)資源
- 2.x僅是架構(gòu)上發(fā)生了變化,使用方式不變锭吨,對(duì)HDFS使用者透明蠢莺,HDFS 1.x中的命令和API仍可以使用
4.HDFS 2.0 聯(lián)邦制(Federation)
通過多個(gè)namenode/namespace把元數(shù)據(jù)的存儲(chǔ)和管理分散到多個(gè)節(jié)點(diǎn)中,使到namenode/namespace可以通過增加機(jī)器來進(jìn)行水平擴(kuò)展零如。
能把單個(gè)namenode的負(fù)載分散到多個(gè)節(jié)點(diǎn)中躏将,在HDFS數(shù)據(jù)規(guī)模較大的時(shí)候不會(huì)也降低HDFS的性能锄弱。可以通過多個(gè)namespace來隔離不同類型的應(yīng)用祸憋,把不同類型應(yīng)用的HDFS元數(shù)據(jù)的存儲(chǔ)和管理分派到不同的namenode中会宪。
上圖摘自官網(wǎng)(http://hadoop.apache.org/docs/r2.7.4/hadoop-project-dist/hadoop-hdfs/Federation.html)
5.HDFS HA
5.1HA的作用
- 主備NameNode
- 解決單點(diǎn)故障
1.主NameNode對(duì)外提供服務(wù),備NameNode同步主NameNode元數(shù)據(jù)蚯窥,以待切換
2.所有DataNode同時(shí)向兩個(gè)NameNode匯報(bào)數(shù)據(jù)塊信息
- 兩種切換選擇
1.手動(dòng)切換:通過命令實(shí)現(xiàn)主備之間的切換掸鹅,可以用HDFS升級(jí)等場(chǎng)合
2.自動(dòng)切換:基于Zookeeper實(shí)現(xiàn)
- 基于Zookeeper自動(dòng)切換方案
1.ZooKeeper Failover Controller:監(jiān)控NameNode健康狀態(tài),
2.并向Zookeeper注冊(cè)NameNode
3.NameNode掛掉后拦赠,ZKFC為NameNode競(jìng)爭(zhēng)鎖巍沙,獲得ZKFC 鎖的NameNode變?yōu)閍ctive
5.2 HA原理
需要做HDFS HA的話,首先需要保證namenode中的fsimage和edits文件一致矛紫,需要產(chǎn)生的時(shí)候(格式化的時(shí)候)就保持一致赎瞎。
fsImage保證一致做法:需要在一臺(tái)NameNode上生成后,拷貝到另外的NameNode上颊咬。
如何保證edits文件在所有NameNode一致务甥?因?yàn)閑dits在HDFS文件發(fā)生變化時(shí),edits文件就會(huì)發(fā)生變化喳篇,故需要借助第三方處理敞临。
利用NFS,是FreeBSD支持的文件系統(tǒng)中的一種,它允許網(wǎng)絡(luò)中的計(jì)算機(jī)之間通過TCP/IP網(wǎng)絡(luò)共享資源麸澜,但是此種方式并不是真正意義上的高可用挺尿,在資源共享主機(jī)宕機(jī)后,就不可服務(wù)了炊邦。
采用QJM(Quorum Journal Manager)的方式進(jìn)行高可用:所有的edits文件交由JN管理编矾,即使NameNode掛了也沒事。