- 以字節形式存儲
- 文件線性切割成塊(Block):偏移量 offset (byte)
- Block分散存儲在集群節點中
- 單一文件Block大小一致,文件與文件可以不一致
- Block可以設置副本數,副本無序分散在不同節點中
- 副本數不要超過節點數量
- 文件上傳可以設置Block大小和副本數(資源不夠開辟的進程)
- 已上傳的文件Block副本數可以調整,大小不變(2.x 128MB 3 blocks)
- 只支持一次寫入多次讀取,同一時刻只有一個寫入者
- 可以append追加數據
HDFS架構模型
- 文件元數據MetaData,文件數據
- 元數據
- 數據本身
- NameNode(主)節點保存文件元數據:單節點 posix
- DataNode(從)節點保存文件Block數據:多節點
- DataNode與NameNode保持心跳,提交Block列表
- HdfsClient與NameNode交互元數據信息
- HdfsClient與DataNode交互文件Block數據(cs)
- DataNode 利用服務器本地文件系統存儲數據塊
HDFS架構圖
HDFS設計思想
- 分散均勻存儲 dfs.blocksize = 128M
- 備份冗余存儲 dfs.replication = 3
NameNode(NN)
- 基於內存存儲 :不會和磁盤發生交換(雙向)
- 只存在內存中
- 持久化(單向)
- NameNode主要功能:
- 接受客戶端的讀寫服務
- 收集DataNode匯報的Block列表信息
- NameNode保存metadata信息包括
- 文件owership和permissions
- 文件大小,時間
- (Block列表:Block偏移量),位置信息(持久化不存)
- Block每副本位置(由DataNode上報)
NameNode持久化
- NameNode的metadata信息在啟動后會加載到內存
- metadata存儲到磁盤文件名為”fsimage”(時點備份)
- Block的位置信息不會保存到fsimage
- edits記錄對metadata的操作日志…>Redis
- 二者的產生時間和過程?(format)
SecondaryNameNode(SNN)
- 它不是NN的備份(但可以做備份),它的主要工作是幫助NN合並edits log,減少NN啟動時間。
- SNN執行合並時機
- 根據配置文件設置的時間間隔fs.checkpoint.period 默認3600秒
- 根據配置文件設置edits log大小 fs.checkpoint.size 規定edits文件的最大值默認是64MB
SNN合並流程圖
DataNode(DN)
- 本地磁盤目錄存儲數據(Block),文件形式
- 同時存儲Block的元數據信息文件
- 啟動DN時會向NN匯報block信息
- 通過向NN發送心跳保持與其聯系(3秒一次),如果NN 10分鍾沒有收到DN的心跳,則認為其已經lost,並copy其上的block到其它DN
HDFS優點
- 高容錯性
- 數據自動保存多個副本
- 副本丟失后,自動恢復
- 適合批處理
- 移動計算而非數據
- 數據位置暴露給計算框架(Block偏移量)
- 適合大數據處理
- GB 、TB 、甚至PB 級數據
- 百萬規模以上的文件數量
- 10K+ 節點
- 可構建在廉價機器上
- 通過多副本提高可靠性
- 提供了容錯和恢復 機制
HDFS缺點
- 低延遲數據訪問
- 比如毫秒級
- 低延遲與高吞吐率
- 小文件存取
- 占用NameNode 大量內存
- 尋道時間超過讀取時間
- 並發寫入、文件隨機修改
- 一個文件只能有一個寫者
- 僅支持append
Block的副本放置策略
- 第一個副本:放置在上傳文件的DN;如果是集群外提交,則隨機挑選一台磁盤不太滿,CPU不太忙的節點。
- 第二個副本:放置在於第一個副本不同的 機架的節點上。
- 第三個副本:與第二個副本相同機架的節點。
- 更多副本:隨機節點