存儲模型:字節
文件線性切割成塊(Block):偏移量 offset (byte)
Block分散存儲在集羣節點中
單一文件Block大小一致,文件與 文件能夠不一致
Block能夠設置副本數,副本分散在不一樣節點中
副本數不要超過節點數量
文件上傳能夠設置Block大小和副本數
已上傳的文件Block副本數能夠調整,大小不變
只支持一次寫入屢次讀取,同一時刻只有一個寫入者
能夠append追加數據
架構模型:
文件元數據MetaData,文件數據
1>元數據(namenode 元數據 和 datanode 上報元數據)
2>數據自己
(主)NameNode節點保存文件元數據:單節點 posix
(從)DataNode節點保存文件Block數據:多節點
DataNode與NameNode保持心跳,提交Block列表
HdfsClient與NameNode交互元數據信息
HdfsClient與DataNode交互文件Block數據
單機 HDFS架構
HDFS 思想
Namenode
基於內存存儲 :
NameNode主要功能:
-
接受客戶端的讀寫服務
-
收集DataNode彙報的Block列表信息
NameNode保存metadata信息包括
-
文件owership和permissions
-
文件大小,時間
-
(Block列表:Block偏移量),位置信息
-
Block每副本位置(由DataNode上報)
NameNode持久化
-
metadata一部分信息在啓動後會加載到內存,還有一部分由DataNode上報
-
metadata存儲到磁盤文件名爲 fsimage
-
Block的位置信息不會保存到 fsimage
-
edits記錄對metadata的操做日誌,按期或達到某個大小 由SecondNameNode 或者是 NameNode Standby(HA) 拷貝回去 合併到fsimage
SecondaryNameNode
減小NameNode啓動時間
SNN執行合併時機
合併流程
第一次合併 須要拉去 edit 和 fsimage 第二次只須要拉去 edit
DataNode
本地磁盤目錄存儲數據(Block),文件形式
同時存儲Block的元數據信息文件
啓動DN時會向NN彙報block信息
經過向NN發送心跳保持與其聯繫(3秒一次),若是NN 10分鐘沒有收到DN的心跳,則認爲其已經lost,並copy其上的block到其它DN
HDFS 優勢
高容錯性
適合批處理
-
移動計算而非數據
-
數據位置暴露給計算框架(Block偏移量)
適合大數據處理
-
GB 、TB 、甚至PB 級數據
-
百萬規模以上的文件數量
-
10K+ 節點
可構建在廉價機器上
HDFS 缺點
低延遲數據訪問
小文件存取
-
佔用NameNode 大量內存
-
尋道時間超過讀取時間
併發寫入、文件隨機修改
Block 副本放置策略
第一個副本:放置在上傳文件的DN;若是是集羣外提交,則隨機挑選一臺磁盤不太滿,CPU不太忙的節點。
第二個副本:放置在於第一個副本不一樣的 機架的節點上。
第三個副本:與第二個副本相同機架的節點。
更多副本:隨機節點
寫流程
Client
-
切分文件Block(切分過程當中是嚴格按照大小來切分,有可能致使同一行出如今兩個不一樣的block中,mr 在處理的時候考慮這種狀況)
-
按Block線性和NN獲取DN列表(副本數)
-
驗證DN列表後以更小的單位流式傳輸數據
-
各節點,兩兩通訊肯定可用
-
Block傳輸結束後:
-
DN向NN彙報Block信息
-
DN向Client彙報完成
-
Client向NN彙報完成
-
獲取下一個Block存放的DN列表
-
最終Client彙報完成
-
NN會在寫流程更新文件狀態
讀流程
-
和NN獲取一部分Block副本位置列表
-
在Block副本列表中按距離擇優選取
-
線性和DN獲取Block,最終合併爲一個文件
HDFS文件權限 POSIX
與Linux文件權限相似
若是Linux系統用戶zhangsan使用hadoop命令建立一個文件,那麼這個文件在HDFS中owner就是zhangsan。
HDFS的權限目的
安全模式
namenode啓動的時候,首先將映像文件(fsimage)載入內存,並執行編輯日誌(edits)中的各項操做。
一旦在內存中成功創建文件系統元數據的映射,則建立一個新的fsimage文件(這個操做不須要SecondaryNameNode)和一個空的編輯日誌。
此刻namenode運行在安全模式。即namenode的文件系統對於客服端來講是隻讀的。(顯示目錄,顯示文件內容等。寫、刪除、重命名都會失敗)。
在此階段Namenode收集各個datanode的報告,當數據塊達到最小副本數以上時,會被認爲是「安全」的, 在必定比例(可設置)的數據塊被肯定爲「安全」後,再過若干時間,安全模式結束
當檢測到副本數不足的數據塊時,該塊會被複制直到達到最小副本數,系統中數據塊的位置並非由namenode維護的,而是以塊列表形式存儲在datanode中。
總結
-
數據元數據
-
內存存儲,不會有磁盤交換
-
持久化(fsimage,eidts log)
-
不會持久化block的位置信息
-
block:偏移量,由於block不能夠調整大小,hdfs,不支持修改文件
-
偏移量不會改變
datanode
-
block塊
-
磁盤
-
面向文件,大小同樣,不能調整
-
副本數,調整,(備份,高可用,容錯/能夠調整不少個,爲了計算向數據移動)
SN
-
NN&DN
-
心跳機制
-
DN向NN彙報block信息