1. 程式人生 > >大數據技術原理與應用——分布式文件系統HDFS

大數據技術原理與應用——分布式文件系統HDFS

大小 寫入 支持 lock 小文件 新的 配額 pan 內存

分布式文件系統HDFS

  • 分布式文件系統

  分布式文件系統把文件分布存儲到多個計算機節點上,成千上萬的計算機節點構成計算機集群。

  分布式文件系統在物理結構上是由計算機集群中的多個節點構成的,一類叫主節點(Master Node)或被稱為名稱節點(NameNode)

  另一類叫從節點(Slave Node)或被稱為數據節點(DataNode)

  

  • HDFS簡介

      HDFS要實現以下目標:

    1. 兼容廉價的硬件設備
    2. 流數據讀寫
    3. 支持大數據集
    4. 簡單的文件模式
    5. 強大的跨平臺兼容性

      HDFS的局限性

    1. 不適合低延遲數據訪問(無法實現實時處理需求)
    2. 無法高效存儲大量小文件
    3. 不支持多用戶寫入及任意修改文件(只允許追加)
  • HDFS相關概念

    塊:HDFS默認一個塊64MB,一個文件被分成多個塊,以塊作為存儲單位,塊的大小遠遠大於普通文件系統,可以最小化尋址開銷。

    采用抽象的塊概念的明顯好處:

    支持大規模文件存儲:大規模文件可以被分拆成若幹各文件塊,不同的塊可以被分發到不同的節點上,因此一個文件的大小不會受到單個節點的存儲容量的限制

    簡化系統設計:文件塊大小時固定的,可以很容易計算出一個節點可以存儲多少文件塊;其次方便了元數據的管理

    適合數據備份:每個文件塊都可以冗余存儲到多個節點上,大大提高了系統的容錯性和可用性

名稱節點 數據節點
存儲元數據 存儲文件內容
元數據保存在內存中 文件內容保存在磁盤

保存文件,block, datanode之間的映射關系

維護了block id和datanode本地文件的映射關系

  • HDFS存儲原理  

  名稱節點:負責管理分布式文件系統的命名空間,保存了兩個核心的數據結構,即FsImage和EditLog。名稱節點記錄了每個文件中各個塊所在地 數據節點的位置信息

    FsImage用於維護文件系統樹以及文件樹中所有的文件和文件夾的元數據。

  FsImage文件包含文件系統中所有目錄和文件inode的序列化形式。每個inode時一個文件或目錄的元數據的內部表示,並包含此類信息:文件的復制等級、修改和訪問時間、訪問權限、塊大小以及組成文件的塊。對於目錄,則存儲修改時間、權限和配額元數據。

  FsImage文件沒有記錄塊存儲在哪個數據節點,而是由名稱節點把這些映射保留在內存中,當數據節點加入HDFS集群時,數據節點會把自己所包含的塊列表告知給名稱節點,此後會定期執行這種告知操作,以確保名稱節點的塊映射時最新的。

    操作日誌文件EditLog中記錄了所有針對文件的創建、刪除、重命名等操作。

  • HDFS數據讀寫過程

  在名稱節點啟動的時候,會將FsImage文件中的內容加載到內存中,之後再執行EditLog文件中的各項操作,使得內存中的元數據和實際的同步,存在內存中的元數據支持客戶端的讀操作。一旦再內存中成功建立文件系統元數據的映射,則創建一個新的FsImage文件和一個空的EditLog文件。名稱節點啟動以後,HDFS中的更新操作會重新寫到EditLog文件中(因為FsImage文件一般很大,如果所有的更新操作都往FsImage文件中添加,這樣會導致系統運行的十分緩慢,而EditLog文件則小得多)。每次執行寫操作後,且在向客戶端發送成功代碼之前,edits文件都需要同步更新。

  數據節點:是HDFS的工作節點,負責數據的存儲和讀取,根據客戶端或名稱節點的調度來進行數據的存儲和檢索,並且向名稱節點定期發送自己所在存儲的塊的列表。數據節點中的數據會被保存再各自節點的本地Linux文件系統中。     

    

大數據技術原理與應用——分布式文件系統HDFS