fsimage與editlog詳解
1 概述
HDFS中的NameNode被稱為元資料節點DataNode稱為資料節點。NameNode維護了檔案與資料塊的對映表以及資料塊與資料節點的對映表,而真正的資料是儲存在DataNode上。
對於NameNode如何儲存這些資訊,它維護兩個檔案,一個是fsimage,一個是editlog。
2 fsimage與editlog作用
fsimage儲存了最新的元資料檢查點,在HDFS啟動時載入fsimage的資訊,包含了整個HDFS檔案系統的所有目錄和檔案的資訊。
對於檔案來說包括了資料塊描述資訊、修改時間、訪問時間等;對於目錄來說包括修改時間、訪問許可權控制資訊(目錄所屬使用者,所在組)等。
editlog主要是在NameNode已經啟動情況下對HDFS進行的各種更新操作進行記錄,HDFS客戶端執行所有的寫操作都會被記錄到editlog中。
3 設計好處
NameNode起來之後,HDFS中的更新操作會重新寫到edits檔案中,因為fsimage檔案一般都很大(GB級別的很常見),如果所有的更新操作都往fsimage檔案中新增,這樣會導致系統執行的十分緩慢,對於更新操作都會記錄在editlog中,為了避免editlog不斷增大,secondary namenode會週期性合併fsimage和edits成新的fsimage,新的操作記錄會寫入新的editlog中,這個週期可以自己設定(editlog到達一定大小或者定時)。,術業有專攻嘛。
4 重要性
fsimage包含Hadoop檔案系統中的所有目錄和檔案idnode的序列化資訊,所以如果fsimage丟失或者損壞了,那麼即使DataNode上有塊的資料,但是我們沒有檔案到塊的對映關係,我們也無法用DataNode上的資料!所以定期及時的備份fsimage和edits檔案非常重要!
總之:
fsimage上邊儲存了DataNode上邊的資料的塊的對映關係以及相關資訊
editlog上邊儲存了DataNode上邊的資料的修改,編輯等相關資訊。
1、概念:
fsimage儲存了最新的元資料檢查點。
edits儲存自最新檢查點後的名稱空間的變化。
2、工作原理:
從最新檢查點後,hadoop將對每個檔案的操作都儲存在edits中,為避免edits不斷增大,secondary namenode就會週期性合併fsimage和edits成新的fsimage,edits再記錄新的變化。
這種機制有個問題:因edits存放在Namenode中,當Namenode掛掉,edits也會丟失,導致利用secondary namenode恢復Namenode時,會有部分資料丟失。