HDFS NN和SNN功能剖析

概述

NameNode對集群中元數據進行管理,外圍節點需要頻繁隨機存取元數據。

如何支持快速隨機存取?因此需要把元數據存儲在內存中。但內存中的數據在服務器斷電後就會丟失,所以內存中的元數據需要被持久化。

持久化哪裡?持久化到文件系統中,存儲為fsimage文件。隨著時間的流逝,fsimage文件會變得越來越龐大,同時對內存和fsimage元數據的增、刪、改、查操作,fsimage文件的大小就會成為存取速度的瓶頸。

如何優化?引入edits日誌文件。fsimage為某一時間節點的全量元數據,而edits日誌為最新元數據。也就是說,Namenode同時對內存和edits日誌進行操作。

之後又會出現edits日誌越來越大,以及如何同fsimage合併的問題?系統引入了SecondNameNode,其負責將edits日誌和fsimage合併,然後將最新的fsimage推送給NameNode,而NameNode則是向最新生成的edits日誌文件寫入元數據。

工作機制


HDFS NN和SNN功能剖析


  • 如果NameNode是首次啟動,則需要格式化HDFS,生成fsimage和edits;否則,啟動時讀取fsimage和edits到內存中初始化元數據。
  • ClientNode向NameNode發起元數據操作請求(增刪改查),NameNode將元數據先寫入edits(防止NameNode掛掉,內存中元數據丟失導致客戶端無法訪問數據),再寫入內存中。
  • SecondNameNode向NameNode定時發起請求確認是否需要checkpoint。如果滿足到達設置定時時間間隔或edits文件寫滿,則發起checkpoint請求;否則,繼續等待。checkpoint需滿足條件:時間達到一個小時fsimage與edits就會進行合併 dfs.namenode.checkpoint.period 3600shdfs操作達到1000000次也會進行合併 dfs.namenode.checkpoint.txns 1000000檢查間隔每隔多長時間檢查一次hdfs dfs.namenode.checkpoint.check.period 60s
  • 請求執行check point。
  • NameNode滾動生成新的edits.new文件,後續ClientNode對元數據操作請求都記錄到edits.new文件中。
  • SecondNameNode通過http get獲取NameNode滾動前的edits和fsimage文件。
  • SecondNameNode將fsimage讀入內存,逐條執行edits,合併生成fsimage.ckpt文件。
  • SecondNameNode通過http post將fsimage.ckpt文件發送到NameNode上。
  • NameNode將fsimage.ckpt改名為fsimage(此文件為此刻全量元數據,待後續NameNode重啟加載),將edits.new改名為edits。同時,會更新fstime。

  • 分享到:


    相關文章: