fsimage文件丢失_hadoop fsimage edits关系
fsimage = name table? ,? 存放namonode中所有數(shù)據(jù),運(yùn)行時(shí)數(shù)據(jù)加載到內(nèi)存中存放
edits_inprogress 類(lèi)似于LSM樹(shù)中的Log,在向hdfs寫(xiě)的過(guò)程都向此文件存放,
當(dāng)存的數(shù)據(jù)到一定程度/或者定期間隔多久,會(huì)把此文件內(nèi)容跟新到fsimage
剛開(kāi)始寫(xiě)數(shù)據(jù)時(shí)會(huì)同時(shí)向namonode內(nèi)存和edit中寫(xiě),
此時(shí)立刻讀取剛寫(xiě)入的數(shù)據(jù)是讀取namenode內(nèi)存和原fsimage內(nèi)存的數(shù)據(jù),
在當(dāng)edits的數(shù)據(jù)合并到fsimage時(shí),在讀取寫(xiě)入的那個(gè)數(shù)據(jù)就會(huì)在fsimage中讀取。
1.SNN CheckPoint的處理流程
配置中配置做CheckPoint的兩個(gè)條件,一個(gè)是文件大小editlog大于多大就做,另一個(gè)是時(shí)間維度,多長(zhǎng)時(shí)間做一次。
(1)SNN首先檢查是否需要進(jìn)行checkpoint操作,如果上面兩個(gè)條件任何一個(gè)滿足了就可以
(2)通過(guò)RPC 向NameNode發(fā)送請(qǐng)求,rollEditLog()NameNode關(guān)閉現(xiàn)在的edit的stream,同時(shí)生成一個(gè)edit.new,并打開(kāi)加入寫(xiě)入的源。
(3)SNN從NN處download fsimage文件和edit文件并進(jìn)行merge
(4)merge結(jié)束后通知NN從SNN處拉去FSImage文件保存在NN的FSImage.ckpt上面
(5)一切順利結(jié)束的話將edit.new重命名為edit,并open stream,將FSImage.ckpt重命名為FSImage,更新FSTime文件,更新時(shí)間戳
2、NN重啟對(duì)Image和Edits的處理
先對(duì)各個(gè)目錄的image和edit文件有效性進(jìn)行判斷,同時(shí)讀取checkpoint的最近值。
如果image.ckpt存在,同時(shí)edit.new存在那么也許正進(jìn)行一半,無(wú)法確定是否完成image拉取,刪掉image.ckpt。否則將image.ckpt rename到image。
然后正常的讀取FSImage,將edit merge進(jìn)去。
如果存在edit.new 也merge進(jìn)去。
總結(jié)
以上是生活随笔為你收集整理的fsimage文件丢失_hadoop fsimage edits关系的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: window上安装mysql_在wind
- 下一篇: mysql genlog 分析_Mysq