HDFS元數據解析

2.1 概述

從形式上講,元數據可分爲內存元數據和元數據文件兩種。其中NameNode在內存中維護整個文件系統的元數據鏡像,用於HDFS的管理;元數據文件則用於持久化存儲。

從類型上講,元數據有三類重要信息:
  • 第一類是文件和目錄自身的屬性信息,例如文件名、目錄名、父目錄信息、文件大小、創建時間、修改時間等。
  • 第二類記錄文件內容存儲相關信息,例如文件塊情況、副本個數、每個副本所在的Data Node 信息等。
  • 第三類用來記錄HDFS中所有Data Node信息,用於Data Node管理。

2.2 內存元數據結構


2.2.1 INode


文件和目錄是文件系統的基本元素,HDFS將這些元素抽象成INode,每一個文件或目錄都對應一個唯一的INode。它由FSNamesystem的成員變量dir實現對整個HDFS中INode的組織和操作,它是一個FSDirectory類。

INode信息完全位於內存,因此有效的提高元數據的服務性能,然而一旦掉電將不再存在,故需要將INode信息保存到磁盤,這個功能是由FSImage完成的,它是架構在內存元數據與磁盤元數據文件之間的橋樑。

由於所有的元數據位於內存,其大小隨文件系統的規模增大而增大,如果每次都將整個內存元數據導出磁盤,將會帶來很大的系統開銷,所以HDFS在實現時,沒有采用定期導出元數據的方法,而是採用元數據鏡像文件(FSImage)+日誌文件(edits)的備份機制,其中鏡像文件是某一時刻內存元數據的真實組織情況,而日誌文件則記錄了該時刻以後所有的元數據操作 。

2.2.2 Block


Block是對於文件內容組織而言的,按照固定大小,順序對文件進行劃分並編號,劃分好的每一個塊就稱之爲一個Block,HDFS默認的Block大小爲64MB。

當一個客戶端訪問某一個文件特定偏移量的內容時,HDFS首先根據路徑信息找到該文件對應的INode ,根據偏移計算出Block位置,然後找出相應的BlockInfo,再找到副本所在Data Node 的信息,選擇其中一個Data Node進行連接,獲取相應的內容。


2.3 磁盤元數據文件


磁盤元數據文件包括以下四個:
  • fsimage:元數據鏡像文件。
  • edits:日誌文件。
  • fstime:保存最近一次Checkpoint的時間。
  • VERSION:標誌性文件,最後被創建,它的存在表明前三個元數據文件的創建成功。


2.4 Format 情景分析


format 主要分爲以下幾個步驟:
  1. 確定能否格式化;
  2. 創建元數據文件在內存中的鏡像;
  3. 對內存鏡像中的數據結構進行初始化;
  4. 將內存鏡像寫入元數據備份目錄。

2.5 元數據應用場景分析


下面我們按照元數據的生命週期順序,列舉元數據所出現的各個應用場景。

場景1
HDFS在第一次使用前,需要進行格式化,格式化的結果是:在元數據鏡像文件備份路徑的current目錄下,產生元數據文件:fsimage、fstime、VERSION等;在日誌文件備份路徑的current目錄下,產生日誌文件:edits、fstime、VERSION等。

場景2
啓動HDFS,HDFS將fsimage和edits文件內容讀入內存,進行合併,填充與INode相關的元數據結構,並將新的元數據內存鏡像導出,在磁盤上形成新的fsimage和edits文件。HDFS同時還接收Data Node的心跳信息,填充與Block和Data Node相關的元數據結構。

場景3
HDFS正常運行,此時如果有元數據更新操作,HDFS會更新對應的內存元數據結構,並將該元數據操作日誌記錄寫入磁盤的日誌文件edits。

場景4
如果NameNode與Secondary NameNode、 Backup Node或Checkpoint Node配合使用,那麼,一定間隔後會進行Checkpoint操作,Checkpoint操作會形成當前某一時刻的元數據鏡像文件fsimage,以該文件替換NameNode上原有的fsimage,並以最新fsimage對應時刻之後的日誌記錄文件edits替換NameNode上原有的edits。該機制可以有效限制日誌文件的大小,防止其無限制增長,同時也降低了HDFS啓動時的合併時間。







發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章