1. 程式人生 > >Hadoop分散式檔案系統--HDFS結構分析

Hadoop分散式檔案系統--HDFS結構分析

前言

在Hadoop內部,具體實現了許多類的檔案系統,當然最最被我們用到的就是他的分散式檔案系統HDFS了。但是本篇文章不會講HDFS的主從架構等東西,因為這些東西網上和資料書中都講得很多了。所以,我決定以我個人的學習所得,來講講HDFS內部的一些有意思的東西,也作為一個起始點,為後續繼續深入其中模組的學習做基礎。

HDFS兩大主流關係模組

  • 與NameNode相關,檔案系統元資料操作相關。包括檔案目錄樹,每個檔案對於資料塊列表,fsImgae映象檔案和editlog編輯日誌在維護整個叢集元資料的時候的各種操作。

  • 與DataNode相關,指的就是資料塊與資料節點的對應關係,通俗的理解就是某個資料塊儲存在哪些資料節點上。裡面其實會涉及到很多操作,包括block副本複製,損壞塊刪除,租約機制等等。

第一關係模組(NameNode相關)

涉及的類

INode

Hadoop也同樣用了類似linux檔案系統中的i-node的概念,即索引節點。INode是一個抽象類,後面的INodeDirectory以及INodeFile都是他的子類,這樣就可以做到保持一些共有的屬性。

INodeDirectory,INodeFile

  • 常用方法:
    • INodeDirectory.removeChild()

FSImage

  • 名稱空間映象類,下面是常用的方法
    • FSImage.saveFSImage()–講當前時刻的名稱空間映象,儲存檔案中
    • FSImage.loadFSImage()–讀取映象檔案中的資料,恢復元資料

FSEditLog

  • 編輯日誌類,下面是常用方法
    • FSEditLog.logEdit()–寫入日誌記錄操作。
    • FSEditLog.logSync()–同步日誌記錄操作。
    • FSEditLog.rollEditLog()–用於第二名位元組點上載新名稱空間映象。

FSDirectory

  • HDFS引入FSDirectory作為門面,處理各種操作,然後分派到子系統中的各個物件中。常用方法
    • getFileInfo()–獲取檔案狀態資訊
    • setOwner()–修改檔案主識別符號和使用者組識別符號

第二關係模組(DataNode相關)

Block資料塊相關類

  • BlocksMap–資料塊對映,名位元組點上資料塊的元資料
  • DatanodeDescriptor–資料節點描述符,名位元組點對資料節點的抽象
  • BlockInfo-BlocksMap,儲存資料節點的資訊

資料節點管理

  • refreshNodes()–會讀取dfs.hosts.exclude,include配置的資訊。
  • registerDatanode–資料節點註冊
  • DataNode.offerService()–資料節點利用迴圈向名位元組點發送資訊。

網路結構

  • 相關類NetworkTopology,常用方法:

    • getDistance()–計算網路距離
    • isOnSameRack()–判斷節點是否屬於同一機架上
  • DNSToSwitchMapping–此介面用於主機到網路位置的轉換

資料塊管理

  • 相關類主要為FSNameSystem,常用方法:
    • FSNameSystem.addStoreBlock()–新增資料塊副本
    • blockReceived()–資料塊提交方法,資料節點成功接收到一個數據塊後,必須使用此方法向名位元組點提交資料塊資訊。

讀取資料方法

  • getBlockLocations()–讀取資料前需要定位資料的位置,返回LocatedBlock物件例項
  • reportBadBlocks()

租約

  • 簡單的說,租約是名位元組點給予租約持有者在規定時間內對檔案的使用許可權。
    • LeaseManager.Lease 租約持有者的資訊,就是客戶端。
    • LeaseManager.add()–在租約管理器中新增開啟檔案的資訊。
    • FSNamesystem.checkLease()–租約檢查操作,為追加資料開啟檔案,新增,放棄資料塊或關閉檔案的時候,都需要對被操作的檔案進行租約檢查。
    • LeaseManager.renewLease()–通過更新Lease.lastUpdate的值來維護租約。
    • LeaseManager.Monitor–這是一個內部類,Monitor類實現了runnable介面,定期進行租約檢查。

安全模式

  • SafeMode安全模式是HDFS的一個只讀的檢視模式,所有的更新操作都會檢驗一次是否處於安全模式,相關類以及方法
    • SafeModeMonitor–安全模式的檢查執行緒實現類。
    • canLeave()–判斷內部的reached變數的值
    • setSafeMode()

參考文獻

《Hadoop技術內部–HDFS結構設計與實現原理》.蔡斌等