NameNode啟動中image檔案處理流程
NameNode時與image檔案相關的大概有下面三步操作:
第一步 載入image
NameNode啟動後時首先載入硬碟上的fsimage檔案(保持了整個名稱空間)和edits檔案(保持了名稱空間的操作日誌),在記憶體中merge後將新的fsimage寫到磁碟上,即做一次checkpoint。
其中載入過程如圖1所示:
圖1 載入image檔案流程
通常NameNode配置兩個目錄來存放fsimage&edits檔案,分佈是本地磁碟和NFS,防止NameNode所在機器磁碟壞掉後資料丟失。
每個目錄下都保持了一個fstime檔案,裡面記錄了最近一次checkpoint時間。NameNode啟動時根據checkpoint時間載入最新的一份資料。
edits.new是個臨時檔案,只有SecondaryNameNode正在做checkpoint的時候存在。
第二步 儲存image
NameNode載入完fsimage&edits檔案後,會將merge後的結果寫到磁碟上。寫的過程會對本地磁碟和NFS 依次 做圖2所示的操作。
圖2 儲存image檔案流程
這一步做完後,磁碟上有一份原始的fsimage檔案,一份最新checkpoint檔案:fsimage.ckpt,另外edits&edits.new為空檔案(4個位元組)。
第三步 滾動image檔案
寫完checkpoint後,NameNode會對磁碟上的檔案做一次滾動(重新命名),如圖3所示:
圖3 滾動image檔案流程
該步驟將fsimage.ckpt重新命名為fsimage(覆蓋原有fsimage檔案),edits.new重新命名為edits(覆蓋原有edits檔案),並將最新時間戳寫入fstime檔案。