1.1、分佈式存儲系統HDFS 介紹
(1)存儲模型:字節
文件線性切割成塊(Block):偏移量 offset ;
Block分散存儲在集羣節點中,單一文件Block大小一致,文件與文件可以不一致;
Block可以設置副本數,副本無序分散在不同節點中(副本數不要超過節點數量);
文件上傳可以設置Block大小和副本數,已上傳的文件Block副本數可以調整,大小不變;
–只支持一次寫入多次讀取,同一時刻只有一個寫入者;
–可以append追加數據。
(2)架構模型:
–文件元數據MetaData,文件數據
- 元數據
- 數據本身
–(主)NameNode節點保存文件元數據:單節點 posix
–(從)DataNode節點保存文件Block數據:多節點
–DataNode與NameNode保持心跳,提交Block列表
–HdfsClient與NameNode交互元數據信息
–HdfsClient與DataNode交互文件Block數據(cs)
–DataNode 利用服務器本地文件系統存儲數據塊
(3)HDFS架構:
NameNode(NN):
(1)基於內存存儲 :不會和磁盤發生交換(雙向)
- 只存在內存中
- 持久化(單向)
(2)NameNode主要功能:接受客戶端的讀寫服務、收集DataNode彙報的Block列表信息
(3)NameNode保存metadata信息包括:
- 文件owership和permissions
- 文件大小,時間
- (Block列表:Block偏移量),位置信息(持久化不存)
- Block每副本位置(由DataNode上報)
(4)NameNode持久化:
- NameNode的metadata信息在啓動後會加載到內存
- metadata存儲到磁盤文件名爲”fsimage”(時點備份)
- Block的位置信息不會保存到fsimage
- edits記錄對metadata的操作日誌…>Redis
SecondaryNameNode(SNN):
(1)作用:它不是NN的備份(但可以做備份),它的主要工作是幫助NN合併edits log,減少NN啓動時間。
(2)SNN執行合併時機:
- 根據配置文件設置的時間間隔fs.checkpoint.period 默認3600秒
- 根據配置文件設置edits log大小 fs.checkpoint.size 規定edits文件的最大值默認是64MB
DataNode(DN):
- 本地磁盤目錄存儲數據(Block),文件形式
- 同時存儲Block的元數據信息文件
- 啓動DN時會向NN彙報block信息
- 通過向NN發送心跳保持與其聯繫(3秒一次),如果NN 10分鐘沒有收到DN的心跳,則認爲其已經lost,並copy其上的block到其它DN
(4)HDFS寫流程
Client:切分文件Block
-->按Block線性和NN獲取DN列表(副本數)
-->驗證DN列表後以更小的單位流式傳輸數據
-->各節點,兩兩通信確定可用
-->Block傳輸結束後:
- DN向NN彙報Block信息
- DN向Client彙報完成
- Client向NN彙報完成獲取下一個Block存放的DN列表.
-->最終Client彙報完成NN會在寫流程更新文件狀態
(5)HDFS讀流程
Client:
- 和NN獲取一部分Block副本位置列表
- 線性和DN獲取Block,最終合併爲一個文件
- 在Block副本列表中按距離擇優選取
- MD5驗證數據完整性