您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java Hadoop的NameNode和SecondaryNameNode有什么用”,文中的講解內(nèi)容簡(jiǎn)單清晰,易于學(xué)習(xí)與理解,下面請(qǐng)大家跟著小編的思路慢慢深入,一起來(lái)研究和學(xué)習(xí)“Java Hadoop的NameNode和SecondaryNameNode有什么用”吧!
NN和2NN工作機(jī)制
思考:NameNode中的元數(shù)據(jù)是存儲(chǔ)在哪里的?
如果我們假設(shè)元數(shù)據(jù)存儲(chǔ)在NameNode節(jié)點(diǎn)的磁盤(pán)中,因?yàn)榻?jīng)常需要進(jìn)行隨機(jī)訪(fǎng)問(wèn),還有響應(yīng)客戶(hù)請(qǐng)求,那么效率肯定很低。因此,元數(shù)據(jù)需要放在內(nèi)存中。但如果只存在內(nèi)存中,一旦斷電,元數(shù)據(jù)就會(huì)丟失,整個(gè)集群就不能工作了。因此就產(chǎn)生在磁盤(pán)中備份元數(shù)據(jù)的FsImage中。
這樣又會(huì)有新的問(wèn)題出現(xiàn),當(dāng)內(nèi)存中的元數(shù)據(jù)更新時(shí),如果同時(shí)更新FsImage,就會(huì)導(dǎo)致效率過(guò)低,但如果不更新,又會(huì)發(fā)生一致性問(wèn)題,一旦NameNode節(jié)點(diǎn)斷電,就會(huì)產(chǎn)生數(shù)據(jù)丟失。因此,引入Edits文件(這個(gè)文件只進(jìn)行追加操作,效率很高)。每當(dāng)元數(shù)據(jù)有更新或者添加元數(shù)據(jù)時(shí),先把日志記錄到Edits中,然后修改內(nèi)存中的元數(shù)據(jù)。這樣,一旦NameNode節(jié)點(diǎn)斷電,可以通過(guò)FsImage和Edits的合并,合成元數(shù)據(jù)。
但是,如果長(zhǎng)時(shí)間添加數(shù)據(jù)到Edits中,又會(huì)導(dǎo)致該文件數(shù)據(jù)過(guò)大,從而效率降低,并且一旦斷電,恢復(fù)元數(shù)據(jù)需要的時(shí)間過(guò)長(zhǎng)。因此,需要定期進(jìn)行FsImage和Edits的合并,如果這個(gè)操作由NameNode節(jié)點(diǎn)完成,又會(huì)效率過(guò)低。于是乎第二主角登場(chǎng)了,引入一個(gè)新的節(jié)點(diǎn)SecondaryNamenode,他的作用就是專(zhuān)門(mén)用于FsImage和Edits的合并。
工作機(jī)制如圖所示
第一階段:namenode啟動(dòng)
(1)第一次啟動(dòng)namenode格式化后(format),創(chuàng)建fsimage鏡像和edits編輯日志文件。如果不是第一次啟動(dòng),會(huì)直接加載編輯日志和鏡像文件到內(nèi)存。
(2)客戶(hù)端請(qǐng)求元數(shù)據(jù)進(jìn)行增刪改。
(3)namenode對(duì)操作記錄日志,更新滾動(dòng)日志。
(4)然后,namenode對(duì)內(nèi)存的數(shù)據(jù)進(jìn)行增刪改
第二階段:Secondary NameNode工作
(1)Secondary NameNode詢(xún)問(wèn)namenode是否需要checkpoint,就是是否需要檢查。直接帶回namenode是否檢查結(jié)果。
(2)Secondary NameNode請(qǐng)求執(zhí)行checkpoint,也就是進(jìn)行檢查。
(3)namenode滾動(dòng)正在寫(xiě)的edits編輯日志
(4)將滾動(dòng)前的edits編輯日志和fsimage鏡像文件拷貝到Secondary NameNode節(jié)點(diǎn)
(5)Secondary NameNode加載編輯日志和鏡像文件到內(nèi)存,并且進(jìn)行合并
(6)生成新的鏡像文件fsimage.chkpoint文件
(7)拷貝fsimage.chkpoint到namenode節(jié)點(diǎn)
(8)namenode將fsimage.chkpoint重新命名成fsimage,替換了原來(lái)的鏡像
chkpoint檢查時(shí)間參數(shù)設(shè)置
(1)通常情況下,SecondaryNameNode每隔一小時(shí)執(zhí)行一次。
配置文件:hdfs-default.xml
<property> <name>dfs.namenode.checkpoint.period</name> <value>3600</value></property>
(2)一分鐘檢查一次操作次數(shù),當(dāng)操作次數(shù)達(dá)到1百萬(wàn)時(shí),SecondaryNameNode執(zhí)行一次。
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作動(dòng)作次數(shù)</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value>
<description> 1分鐘檢查一次操作次數(shù)</description>
</property>
感謝各位的閱讀,以上就是“Java Hadoop的NameNode和SecondaryNameNode有什么用”的內(nèi)容了,經(jīng)過(guò)本文的學(xué)習(xí)后,相信大家對(duì)Java Hadoop的NameNode和SecondaryNameNode有什么用這一問(wèn)題有了更深刻的體會(huì),具體使用情況還需要大家實(shí)踐驗(yàn)證。這里是億速云,小編將為大家推送更多相關(guān)知識(shí)點(diǎn)的文章,歡迎關(guān)注!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。