一、首先,認識幾個名詞oop
(1)、NameNode中讀、寫、以及DataNode映射等信息叫作「元數據」 ,NameNode元數據存放位置有、內存、fsimage、edits log三個位置。blog
(2)、edits log:記錄當前最新的元數據。內存
(3)、元數據內存:實際在用的元數據。hadoop
(4)、fsimage:元數據內存實體文件,fsimage與NameNode內容是是同樣的(最全元數據)開發
當edits log文件大小達到閾值,會將edits log元數據寫入到fsimage文件,並清除edits log中的元數據。同步
二、NameNode管理元數據方式it
(1)、客戶端上傳文件時NameNode首先會向edits log文件中記錄元數據信息。io
(2)、客戶端上傳文件,完成後返回成功信息到NameNode,NameNode將本次上傳操做產生新的元數據信息寫入到內存中。 test
(3)、每當editslog文件寫滿時,SecondeNameNode會將editslog中的元數據同步合併到fsimage中,且清空editslog下載
(4)、同步數據(checkpiont)觸發方式:fs.checkpoint.period 指定兩次checkpoit的最大時間間隔,默認爲3600秒
:fs.checkpoint.size 規定ediits文件最大值,一旦超過這個值則強制checkpoint,無論是否到最大時間間隔,默認爲64M
三、SecondeNameNode對editslog、fsimage文件同步合併方式
(1)、當editslog文件寫滿時,NameNode向SecondeNameNode發出請求,通知SecondeNameNode進行文件editslog與fsimage合併。
(2)、SecondeNameNode作出響應,並通知NameNode建立新文件edits.new,且向edits.new文件寫入元數據
(3)、SecondeNameNode下載editslog、fsimage文件到SecondeNameNode主機
(4)、SecondeNameNode將下載editslog、fsimage文件作同步合併合併文件爲:fsimage.chkpoint
(5)、將合併文件fsimage.chepoint上傳到NameNode中fsimage同目錄
(6)、重命名fsimage.chepoint文件爲fsimage
(7)、重命名edits.new爲edits
四、nameNode 元數據存儲格式
nameNode(FileName、replicas、block-ids、id2host。。。)
名詞解釋:FileName:文件名稱
replicas:副本個數
block-ids:blockid
後面是文件在dataNode位置
列:/home/test.log,3,{blk_1,blk_2},[{blk_1:[h0,h1,h2]},{blk_2:[h0,h1,h2]}]
不得不說,爲了保證元數據的完整性,可靠性hadoop開發者沒少下功夫