簡單介紹
l 設計思想
分而治之:將大文件、大批量文件,分布式存放在大量服務器上,以便於采取分而治之的方式對海量數據進行運算分析;
l 在大數據系統中作用:
為各類分布式運算框架(如:mapreduce,spark,tez,……)提供數據存儲服務
l 重點概念:文件切塊,副本存放,元數據
HDFS概念和特性
首先,它是一個文件系統,用於存儲文件,通過統一的命名空間——目錄樹來定位文件
其次,它是分布式的,由很多服務器聯合起來實現其功能,集群中的服務器有各自的角色;
架構圖
- namenode存儲文件系統的元數據信息 -->基於內存,不會和磁盤發生交換
- datanode存儲實際的數據塊
- datanode定時發送心跳還有塊報告信息給namenode
- 客戶端通過與namenode通信獲取文件的元數據信息,再通過獲取到的元數據信息直接和datanode交互進行I/O操作
角色介紹
Client:客戶端
文件切分,文件上傳到HDFS時,Client負責將文件切分成一個個Block進行存儲
與Namenode交互,獲取文件的元數據信息
與Datanode交互,讀取或寫入數據
提供一些命令來管理HDFS
通過一些命令來訪問HDFS
metadata:元數據
文件owership和permissions
文件大小和時間
(block列表,偏移量)
block每個副本位置(datanode上報)
block:文件線性切割塊
偏移量:offset(byte)
分散存儲在集群節點中
單一文件block大小一致,文件與文件可以不一致
可以設置副本數,不能超過節點數量,必須分散在不同節點上
已上傳文件副本數可以調整,大小不能改變
一次寫入多次讀取,同時只允許一個用戶寫入,可以append追加數據
NameNode:主節點
管理 HDFS 的名稱空間(NameSpace)
管理數據塊(Block)映射信息
配置副本策略
處理客戶端讀寫請求
DataNode:從節點
本地磁盤存儲block,文件形式
同時存儲block的元數據信息文件
啟動DN時向NN匯報block信息
通過向namenode發送心跳保持聯系(3s/次),如果namenode10分鍾沒有收到心跳,則認為其已經lost,並copy其上的block到其他DataNode
Secondary NameNode:非 NameNode 熱備。NameNode 掛掉時,它並不能馬上替換 NameNode 並提供服務
輔助 NameNode,分擔其工作量
定期合並 fsimage和fsedits,並推送給NameNode
在緊急情況下,可輔助恢復 NameNode
(注:適合用來做數據分析,並不適合用來做網盤應用,因為,不便修改,延遲大,網絡開銷大,成本太高)