HDFS(Hadoop Distributed File System)
Introduction
- Apache HDFS官網
- 可運行在普通且廉價的硬體上
- 高容錯能力
- 提供應用程式對數據的高吞吐量(high throughput)訪問,適用於具有大數據集的應用程式
Assumptions and Goals
- Hardware Failure
- 快速硬體錯誤偵測與自動復原機制
- Streaming Data Access
- 供數據批次處理的應用程式使用,並追求數據訪問的高吞吐量
- Large Data Sets
- 支持大文件存儲,並支持高聚合數據带寬及高擴展性
- Simple Coherency Model
- 支持write-once-read-many access的文件存取模型
- Moving Computation is Cheaper than Moving Data
- 將應用程式的計算移動到數據所在節點附近進行運算,降低網路阻塞,並提高數據吞吐量
- Portability Across Heterogeneous Hardware and Software Platforms
- 支持平台間的可移植性
Core components
HDFS是一個主從式架構(master/slave),一個HDFS集群(cluster)內,包含一個NameNode與多個DataNode。HDFS提供文件系統命名空間(File System Namespace)給使用者,讓使用者將數據儲存在文件中。下列分別說明NameNode與DataNodes。
NameNode
- Master(單個)
- 管理File System Namespace,例如文件開啟、關閉、重新命名文件或資料夾
- 決定Block儲存的DataNode
- 負責響應客戶端的請求,以及文件存取權限控制
- 負責管理以下數據:
- 元數據(Metadata)管理:
- 文件名稱
- 文件屬性(權限、創建時間、副本係數)
- 文件目錄結構
- 文件對應的Block,以及Block所存放的DataNode
- 元數據(Metadata)管理:
DataNodes
- Slaves(一個以上)
- 一般是一個節點執行一個DataNode
- 存放Block
- 執行Block的創建、刪除與副本操作
- 每隔3秒向NameNode發送Heartbeat
- Heartbeat表示該DataNode運作正常
- 每隔10個Heartbeat(30秒),向NameNode發送BlockReport
- BlockReport包含該DataNode上所有的Block列表
- 其他說明:
- NameNode與DataNodes皆可運行在普通的機器上。
- NameNode與DataNodes皆使用JAVA實作,故任何支援JAVA運行的機器皆可執行。
- NameNode與DataNodes一般是運行在不同的機器上。
Blocks
- 在HDFS中,文件會根據hdfs-default.xml或hdfs-site.xml中的dfs.blocksize參數進行切割成Blocks。
- dfs.blocksize預設為128M,當檔案大於128M時,則會進行切割,直到最後一個Block等於或小於128M。
- 寫入時,文件會拆分成多個Block儲存在不同的DataNode。
- 讀取時,則從DataNodes中取出Blocks進行合併。
File System Namespace
- File System Namespace的結構與傳統檔案系統相同,並且支持對檔案的創建、刪除、搬移,重新命名等操作。
- 支持用戶容量配額與訪問權限控制。
- 不支持硬連結與軟連結。
- NameNode負責管理File System Namespace。
- 任何File System Namespace與其屬性的改變,都記錄在NameNode中。
- 應用程序可以設置文件的副本係數,副本係數的資訊儲存在NameNode中。
Data Replication
- HDFS設計目的是為了在跨機器的集群中,提供高可靠的超大文件儲存服務。
- 為了高容錯能力,將Blocks進行多副本方式儲存。
- 每個文件的Block大小與副本係數都是可以設置的。
- 副本係數是指一個Block副本的數量。
- 預設副本係數為3。生產環境設為5或7。
- 副本係數可以在文件創建設置,也可以在之後進行修改。
- HDFS文件都是一次性寫入的(write-once),並嚴格要求一次只能有一個Client進行寫入。
- NameNode管理Block的複製,並週期性的接收DataNode的Heartbeat與BlockReport,
- 根據BlockReport,對寫入文件的副本進行合理的安排。
Replica Selection
- 優先將一個Block的副本放置在不同的機器上。
- 分為積架環境與一般環境說明:
- 一般環境:
- 在DataNode中執行文件寫入:
- 挑選當前DataNode進行第一個Block副本放置處,節省網路傳輸成本。
- 其他副本則以不重複原則,進行隨機挑選。
- 在其他節點執行文件寫入:
- 以不重複原則,進行隨機挑選。
- 在DataNode中執行文件寫入:
- 積架環境:
- 在DataNode中執行文件寫入:
- 挑選當前DataNode進行第一個Block副本放置處。節省網路傳輸成本。
- 優先挑選不同的積架中的DataNode進行寫入,直到所有副本處理完畢。
- 在其他節點執行文件寫入:
- 根據資源狀況挑選DataNode。
- 優先挑選不同的積架中的DataNode進行寫入,直到所有副本處理完畢。
- 在DataNode中執行文件寫入:
- 一般環境: