溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊(cè)×
其他方式登錄
點(diǎn)擊 登錄注冊(cè) 即表示同意《億速云用戶(hù)服務(wù)條款》

Java Hadoop的NameNode和SecondaryNameNode有什么用

發(fā)布時(shí)間:2021-12-09 14:26:15 來(lái)源:億速云 閱讀:165 作者:iii 欄目:大數(shù)據(jù)

這篇文章主要講解了“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ī)制如圖所示

Java Hadoop的NameNode和SecondaryNameNode有什么用

第一階段: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)的鏡像


NN和2NN工作機(jī)制詳解  

Fsimage:NameNode內(nèi)存中元數(shù)據(jù)序列化后形成的文件。

Edits:記錄客戶(hù)端更新元數(shù)據(jù)信息的每一步操作(可通過(guò)Edits運(yùn)算出元數(shù)據(jù))。

NameNode啟動(dòng)時(shí),先滾動(dòng)Edits并生成一個(gè)空的edits.inprogress,然后加載Edits和Fsimage到內(nèi)存中,此時(shí)NameNode內(nèi)存就持有最新的元數(shù)據(jù)信息。Client開(kāi)始對(duì)NameNode發(fā)送元數(shù)據(jù)的增刪改的請(qǐng)求,這些請(qǐng)求的操作首先會(huì)被記錄到edits.inprogress中(查詢(xún)?cè)獢?shù)據(jù)的操作不會(huì)被記錄在Edits中,因?yàn)椴樵?xún)操作不會(huì)更改元數(shù)據(jù)信息),如果此時(shí)NameNode掛掉,重啟后會(huì)從Edits中讀取元數(shù)據(jù)的信息。然后,NameNode會(huì)在內(nèi)存中執(zhí)行元數(shù)據(jù)的增刪改的操作。

由于Edits中記錄的操作會(huì)越來(lái)越多,Edits文件會(huì)越來(lái)越大,導(dǎo)致NameNode在啟動(dòng)加載Edits時(shí)會(huì)很慢,所以需要對(duì)Edits和Fsimage進(jìn)行合并(所謂合并,就是將Edits和Fsimage加載到內(nèi)存中,照著Edits中的操作一步步執(zhí)行,最終形成新的Fsimage)。SecondaryNameNode的作用就是幫助NameNode進(jìn)行Edits和Fsimage的合并工作。

SecondaryNameNode首先會(huì)詢(xún)問(wèn)NameNode是否需要CheckPoint(觸發(fā)CheckPoint需要滿(mǎn)足兩個(gè)條件中的任意一個(gè),定時(shí)時(shí)間到和Edits中數(shù)據(jù)寫(xiě)滿(mǎn)了)。直接帶回NameNode是否檢查結(jié)果。

SecondaryNameNode執(zhí)行CheckPoint操作,首先會(huì)讓NameNode滾動(dòng)Edits并生成一個(gè)空的edits.inprogress,滾動(dòng)Edits的目的是給Edits打個(gè)標(biāo)記,以后所有新的操作都寫(xiě)入edits.inprogress,其他未合并的Edits和Fsimage會(huì)拷貝到SecondaryNameNode的本地,然后將拷貝的Edits和Fsimage加載到內(nèi)存中進(jìn)行合并,生成fsimage.chkpoint,然后將fsimage.chkpoint拷貝給NameNode,重命名為Fsimage后替換掉原來(lái)的Fsimage。

NameNode在啟動(dòng)時(shí)就只需要加載之前未合并的Edits和Fsimage即可,因?yàn)楹喜⑦^(guò)的Edits中的元數(shù)據(jù)信息已經(jīng)被記錄在Fsimage中。

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)注!

向AI問(wèn)一下細(xì)節(jié)

免責(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)容。

AI