HDFS
HDFS 全稱hadoop分布式文件系統,其最主要的作用是作為 Hadoop 生態中各系統的存儲服務
特點
優點
• 高容錯、高可用、高擴展 -數據冗余多副本,副本丟失后自動恢復 -NameNode HA、安全模式 -10K節點規模
• 海量數據存儲 -典型文件大小GB~TB,百萬以上文件數量 PB以上數據規模
• 構建成本低、安全可靠 -構建在廉價的商用服務器上 -提供了容錯和恢復機制
• 適合大規模離線批處理 -流式數據訪問 -數據位置暴露給計算框架
缺點
• 不適合低延遲數據訪問
• 不適合大量小文件存儲 -元數據占用NameNode大量內存空間 -磁盤尋道時間超過讀取時間
• 不支持並發寫入 -一個文件同時只能有一個寫入者
• 不支持文件隨機修改 -僅支持追加寫入
架構圖
Namenode 主節點
管理HDFS文件系統的命名空間、維護元數據信息
處理客戶端讀寫請求
Datanode 從節點
存儲數據(Block)
集群啟動時, DataNode向NameNode匯報Block列表信息集群運行期間, 通過心跳機制定期(默認3秒) 與NameNode保持通信
Secondary node
主要存在於HDFS1.x架構當中, 並不是NameNode的熱備,只是在namende發生故障的時候快速切換
輔助NameNode完成元數據文件fsimage、 edits的定期合並
HDFS存儲機制:元數據
元數據(Metadata)
信息存放在NameNode內存當中 包含:HDFS中文件及目錄的基本屬性信息(如擁有者、權限信息創建時間等)、文件有哪些block構成、 以及block的位置存放信息。
元數據信息持久化
fsimage(元數據鏡像檢查點文件)
edits(編輯日志文件,記錄寫操作)
注:block的位置信息並不會做持久化,僅僅只是在DataNode啟動匯報給NameNode,存放在NameNode內存空間內
HDFS存儲機制:block
Block
• Block是HDFS的最小存儲單元 • Block的大小 -默認大小:128M(HDFS 1.x中,默認64M)
-若文件大小不足128M,則會單獨成為一個block -實質上就是Linux相應目錄下的普通文件
-名稱格式:blk_xxxxxxx
• Block和元數據分開存儲,Block存儲於DataNode,元數據存儲於NameNode
• Block多副本 -默認副本數:3
-機架感知:將副本存儲到不同的機架上,實現數據的高容錯
-副本均勻分布:提高訪問帶寬和讀取性能,實現負載均衡,避免出現數據傾斜
HDFS存儲機制:讀寫流程
寫流程
• 客戶端發送創建文件指令給分布式文件系統
• 文件系統告知namenode • 檢查權限,查看文件是否存在
• EditLog增加記錄 • 返回輸出流對象
• 客戶端往輸出流中寫入數據,分成一個個數據包
• 根據namenode分配,輸出流往datanode寫數據
• 多個datanode構成一個管道pipeline,輸出流寫第一個,后面的轉發
• 每個datanode寫完一個塊后,返回確認信息
• 寫完數據,關閉輸出流
• 發送完成信號給namenode
讀流程
• 客戶端發送打開文件指令給分布式文件系統
• 文件系統訪問namenode,獲得這個文件的數據塊位置列表,返回輸入流對象
• 客戶端從輸入流中讀取數據
• 輸入流從各個datanode讀取數據
• 關閉輸入流