大數據技術原理與應用——分布式文件系統HDFS
分布式文件系統HDFS
- 分布式文件系統
分布式文件系統把文件分布存儲到多個計算機節點上,成千上萬的計算機節點構成計算機集群。
分布式文件系統在物理結構上是由計算機集群中的多個節點構成的,一類叫主節點(Master Node)或被稱為名稱節點(NameNode)
另一類叫從節點(Slave Node)或被稱為數據節點(DataNode)
- HDFS簡介
HDFS要實現以下目標:
- 兼容廉價的硬件設備
- 流數據讀寫
- 支持大數據集
- 簡單的文件模式
- 強大的跨平臺兼容性
HDFS的局限性
- 不適合低延遲數據訪問(無法實現實時處理需求)
- 無法高效存儲大量小文件
- 不支持多用戶寫入及任意修改文件(只允許追加)
- 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