hadoop SecondNamenode 详解
SecondNamenode名字看起來(lái)很象是對(duì)第二個(gè)Namenode,要么與Namenode一樣同時(shí)對(duì)外提供服務(wù),要么相當(dāng)于Namenode的HA。
真正的了解了SecondNamenode以后,才發(fā)現(xiàn)事實(shí)并不是這樣的。
下面這段是Hadoop對(duì)SecondNamenode的準(zhǔn)確定義:
* The Secondary Namenode is a helper to the primary Namenode.
* The Secondary is responsible for supporting periodic checkpoints
* of the HDFS metadata. The current design allows only one Secondary
* Namenode per HDFs cluster.
*
* The Secondary Namenode is a daemon that periodically wakes
* up (determined by the schedule specified in the configuration),
* triggers a periodic checkpoint and then goes back to sleep.
* The Secondary Namenode uses the ClientProtocol to talk to the
* primary Namenode.
SecondNamenode是對(duì)主Namenode的一個(gè)補(bǔ)充,它會(huì)周期的執(zhí)行對(duì)HDFS元數(shù)據(jù)的檢查點(diǎn)。
當(dāng)前的設(shè)計(jì)僅僅允許每個(gè)HDFS只有單個(gè)SecondNamenode結(jié)點(diǎn)。
SecondNamenode是有一個(gè)后臺(tái)的進(jìn)程,會(huì)定期的被喚醒(喚醒的周期依賴相關(guān)配置)執(zhí)行檢查點(diǎn)任務(wù),然后繼續(xù)休眠。
它使用ClientProtocol協(xié)議與主Namenode通信。
1,檢查點(diǎn)到底是做什么用的呢?
先拋開SecondNamenode不說(shuō),先介紹下Namenode中與檢查點(diǎn)相關(guān)的兩個(gè)文件,以及他們之間的關(guān)系。
fsimage文件與edits文件是Namenode結(jié)點(diǎn)上的核心文件。
Namenode中僅僅存儲(chǔ)目錄樹信息,而關(guān)于BLOCK的位置信息則是從各個(gè)Datanode上傳到Namenode上的。
Namenode的目錄樹信息就是物理的存儲(chǔ)在fsimage這個(gè)文件中的,當(dāng)Namenode啟動(dòng)的時(shí)候會(huì)首先讀取fsimage這個(gè)文件,將目錄樹信息裝載到內(nèi)存中。
而edits存儲(chǔ)的是日志信息,在Namenode啟動(dòng)后所有對(duì)目錄結(jié)構(gòu)的增加,刪除,修改等操作都會(huì)記錄到edits文件中,并不會(huì)同步的記錄在fsimage中。
而當(dāng)Namenode結(jié)點(diǎn)關(guān)閉的時(shí)候,也不會(huì)將fsimage與edits文件進(jìn)行合并,這個(gè)合并的過(guò)程實(shí)際上是發(fā)生在Namenode啟動(dòng)的過(guò)程中。
也就是說(shuō),當(dāng)Namenode啟動(dòng)的時(shí)候,首先裝載fsimage文件,然后在應(yīng)用edits文件,最后還會(huì)將最新的目錄樹信息更新到新的fsimage文件中,然后啟用新的edits文件。
整個(gè)流程是沒(méi)有問(wèn)題的,但是有個(gè)小瑕疵,就是如果Namenode在啟動(dòng)后發(fā)生的改變過(guò)多,會(huì)導(dǎo)致edits文件變得非常大,大得程度與Namenode的更新頻率有關(guān)系。
那么在下一次Namenode啟動(dòng)的過(guò)程中,讀取了fsimage文件后,會(huì)應(yīng)用這個(gè)無(wú)比大的edits文件,導(dǎo)致啟動(dòng)時(shí)間變長(zhǎng),并且不可能控,可能需要啟動(dòng)幾個(gè)小時(shí)也說(shuō)不定。
Namenode的edits文件過(guò)大的問(wèn)題,也就是SecondeNamenode要解決的主要問(wèn)題。
SecondNamenode會(huì)按照一定規(guī)則被喚醒,然后進(jìn)行fsimage文件與edits文件的合并,防止edits文件過(guò)大,導(dǎo)致Namenode啟動(dòng)時(shí)間過(guò)長(zhǎng)。
2,檢查點(diǎn)被喚醒的條件?
以前的文章里面曾經(jīng)寫過(guò)相關(guān)內(nèi)容,這里在回顧一下。
控制檢查點(diǎn)的參數(shù)有兩個(gè),分別是:
fs.checkpoint.period:單位秒,默認(rèn)值3600,檢查點(diǎn)的間隔時(shí)間,當(dāng)距離上次檢查點(diǎn)執(zhí)行超過(guò)該時(shí)間后啟動(dòng)檢查點(diǎn)
fs.checkpoint.size:單位字節(jié),默認(rèn)值67108864,當(dāng)edits文件超過(guò)該大小后,啟動(dòng)檢查點(diǎn)
上面兩個(gè)條件是或的關(guān)系,主要滿足啟動(dòng)一個(gè)條件,檢查點(diǎn)即被喚醒
3,檢查點(diǎn)執(zhí)行的過(guò)程?
a,初始化檢查點(diǎn)
b,通知Namenode啟用新的edits文件
c,從Namenode下載fsimage和edits文件
d,調(diào)用loadFSImage裝載fsimage
e,調(diào)用loadFSEdits應(yīng)用edits日志
f,保存合并后的目錄樹信息到新的image文件中
g,將新產(chǎn)生的image上傳到Namenode中,替換原來(lái)的image文件
h,結(jié)束檢查點(diǎn)
4,SecondNamenode最好于Namenode部署到不同的服務(wù)器
應(yīng)該在merge的過(guò)程中,SecondNamenode對(duì)內(nèi)存的需求與Namenode是相同的,所以對(duì)于那些大型的生產(chǎn)系統(tǒng)中,如果將兩者部署到同臺(tái)服務(wù)器上,在內(nèi)存上會(huì)出現(xiàn)瓶頸。
所以最好將他們分別部署到不同的服務(wù)器。
修改hadoop配置文件的master文件。
5,關(guān)于SecondNamenode的思考
其實(shí)檢查點(diǎn)的執(zhí)行過(guò)程最好在Namenode結(jié)點(diǎn)搞定,也就說(shuō)能有個(gè)任務(wù)定期的將Namenode的內(nèi)存結(jié)果刷新到fsimage中,而不是僅僅在Namenode啟動(dòng)的時(shí)候才進(jìn)行一次合并。
如果可以實(shí)現(xiàn)定期的對(duì)Namenode執(zhí)行檢查點(diǎn),那么SecondNamenode完全沒(méi)有存在的必要了。
或者在SecondNamenode方面實(shí)現(xiàn)增量的刷新,每次不需要將fsimage整個(gè)裝載到內(nèi)存中,而僅僅將增量刷新就OK了。
不過(guò)這樣會(huì)讓系統(tǒng)變得復(fù)雜一些,可以參考o(jì)racle中的檢查點(diǎn)的處理,還是有些復(fù)雜的。
簡(jiǎn)單就是美?!!
?
?FYI:在masters文件中配置second namenode后,日志報(bào)java.net.BindException: Cannot assign requested address異常,而且second namenode啟動(dòng)失敗,反復(fù)測(cè)試發(fā)現(xiàn)是hdfs-site.xml中的dfs.secondary.http.address沒(méi)有更改IP,更改成masters中配置的IP后集群?jiǎn)?dòng)正常。
? dfs.secondary.http.address
? second_namenode:50090
?
? ? The secondary namenode http server address and port.
? ? If the port is 0 then the server will start on a free port.
轉(zhuǎn)載于:https://www.cnblogs.com/langren1992/p/6578658.html
總結(jié)
以上是生活随笔為你收集整理的hadoop SecondNamenode 详解的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: cordova最基本的热更新
- 下一篇: 第一骗