一個檔案存盤在哪個 DataNode 節點的哪個位置的元資料資訊(metadata)上,是由 NameNode 節點決定的,隨著存盤檔案的增多, NameNode 節點上存盤的資訊也會越來越多,因此,HDFS定義了一個 第二名稱節點(SecondaryNameNode) ,用來及時更新這些metadata,
HDFS是一個分布式檔案存盤系統,檔案分布式存盤在多個 DataNode 節點上,
- 一、 SecondaryNameNode節點合并程序
- 二、 檢查點
- 2.1 檢查點合并的時間
- 2.2 檢查點的作用
一、 SecondaryNameNode節點合并程序
fsimage 與 edits 檔案合并的程序如下:

⑴ SecondaryNameNode 節點會定期與 NameNode 節點通信,請求其停止使用 edits 檔案,暫時將新的更新操作寫到一個新的 edits.new 檔案上(這個操作是瞬間完成的),
簡述:將 HDFS 更新記錄寫入一個新的檔案—— edits.new ,
⑵ SecondaryNameNode 節點通過 HTTP GET 方式從 NameNode 節點上獲取 fsimage 和 edits 檔案,并下載到本地的相應目錄下,
簡述:將 fsimage 和 editlog 檔案通過 HTTP協議發送至 SecondaryNameNode 節點,
⑶ SecondaryNameNode 節點將下載下來的 fsimage 檔案載入記憶體,然后執行 edits 檔案中的各項更新操作,使記憶體中的 fsimage 檔案保持最新 (這個程序就是將 edits 檔案和 fsimage 檔案合并),
簡述:將 fsimage 與 editlog 檔案合并,生成一個新的檔案—— fsimage.ckpt ,(這個程序比較耗時,所以要在 SecondaryNameNode 節點上進行,如果在 NameNode 節點中進行,可能會導致整個系統卡頓)
⑷ SecondaryNameNode 節點執行完 ⑶ 中的操作后,會通過 HTTP POST 方式將新的 fsimage 檔案發送到 NameNode 節點上,
簡述:將生成的 fsimage.ckpt 檔案,通過 HTTP協議發送至 NameNode 節點,
⑸ NameNode 節點用從 SecondaryNameNode 節點上接受到的新的 fsimage 檔案,去替換舊的 fsimage 檔案,同時將 edits.new 檔案改名為 edits ,
簡述:將 fsimage.ckpt 檔案重命名為 fsimage ,將 edits.new 檔案重命名為 edits ,
二、 檢查點
SecondaryNameNode節點 定期把NameNode的 fsimage 和 edits 下載到本地,再將它們加載到記憶體并進行合并,最后把合并后新的 fsimage 回傳NameNode (這個程序稱為 檢查點 ),
2.1 檢查點合并的時間
啟動檢查點行程由兩個引數控制,觸發檢查點操作,只需達到以下任一條件:
- 每隔 60 分鐘( 使用到引數 dfs.namenode.checkpoint.period );
- 當 edits 檔案達到 100萬條事務,默認值為 100萬條 ( 使用到引數 dfs.namenode.checkpoint.txns ),
2.2 檢查點的作用
檢查點的作用 (即 合并 的作用),主要是為了 減少NameNode的啟動時間 ,
如果想了解 HDFS 的組成架構,可以看看這篇文章:一文了解 HDFS 及其組成架構 ,當然,如果想看看 HDFS 的作業機制是怎樣的,可以參考這篇文章:圖文詳解 HDFS 作業機制 ,
如果文章對您有幫助,請點個贊,留給評論支持一下😊,若有疑問可以私信留言😉,如果能給個三連(點贊、收藏、關注 )就最好啦😁,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/276155.html
標籤:其他
