HDFS

存儲模型:字節

文件線性切割成塊(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啓動時間
  • 它不是NN的備份(但能夠作備份),它的主要工做是幫助NN合併edits log,減小NN啓動時間。
SNN執行合併時機
  • 根據配置文件設置的時間間隔fs.checkpoint.period 默認3600秒
  • 根據配置文件設置edits log大小 fs.checkpoint.size 規定edits文件的最大值默認是64MB
合併流程
第一次合併 須要拉去 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 大量內存
  • 尋道時間超過讀取時間
併發寫入、文件隨機修改
  • 一個文件只能有一個寫者
  • 僅支持append

Block 副本放置策略

第一個副本:放置在上傳文件的DN;若是是集羣外提交,則隨機挑選一臺磁盤不太滿,CPU不太忙的節點。
第二個副本:放置在於第一個副本不一樣的 機架的節點上。
第三個副本:與第二個副本相同機架的節點。
更多副本:隨機節點

寫流程

Client
  1. 切分文件Block(切分過程當中是嚴格按照大小來切分,有可能致使同一行出如今兩個不一樣的block中,mr 在處理的時候考慮這種狀況)
  2. 按Block線性和NN獲取DN列表(副本數)
  3. 驗證DN列表後以更小的單位流式傳輸數據
  4. 各節點,兩兩通訊肯定可用
  5. Block傳輸結束後:
  6. DN向NN彙報Block信息
  7. DN向Client彙報完成
  8. Client向NN彙報完成
  9. 獲取下一個Block存放的DN列表
  10. 最終Client彙報完成
  11. NN會在寫流程更新文件狀態

讀流程

  1. 和NN獲取一部分Block副本位置列表
  2. 在Block副本列表中按距離擇優選取
  3. 線性和DN獲取Block,最終合併爲一個文件

HDFS文件權限 POSIX

與Linux文件權限相似
  • r: read; w:write; x:execute
  • 權限x對於文件忽略,對於文件夾表示是否容許訪問其內容
若是Linux系統用戶zhangsan使用hadoop命令建立一個文件,那麼這個文件在HDFS中owner就是zhangsan。
HDFS的權限目的
  • 阻止好人錯錯事,而不是阻止壞人作壞事。HDFS相信,你告訴我你是誰,我就認爲你是誰。

安全模式

namenode啓動的時候,首先將映像文件(fsimage)載入內存,並執行編輯日誌(edits)中的各項操做。
一旦在內存中成功創建文件系統元數據的映射,則建立一個新的fsimage文件(這個操做不須要SecondaryNameNode)和一個空的編輯日誌。
此刻namenode運行在安全模式。即namenode的文件系統對於客服端來講是隻讀的。(顯示目錄,顯示文件內容等。寫、刪除、重命名都會失敗)。
在此階段Namenode收集各個datanode的報告,當數據塊達到最小副本數以上時,會被認爲是「安全」的, 在必定比例(可設置)的數據塊被肯定爲「安全」後,再過若干時間,安全模式結束
當檢測到副本數不足的數據塊時,該塊會被複制直到達到最小副本數,系統中數據塊的位置並非由namenode維護的,而是以塊列表形式存儲在datanode中。

總結

角色==進程
namenode
  1. 數據元數據
  2. 內存存儲,不會有磁盤交換
  3. 持久化(fsimage,eidts log)
  4. 不會持久化block的位置信息
  5. block:偏移量,由於block不能夠調整大小,hdfs,不支持修改文件
  6. 偏移量不會改變
datanode
  1. block塊
  2. 磁盤
  3. 面向文件,大小同樣,不能調整
  4. 副本數,調整,(備份,高可用,容錯/能夠調整不少個,爲了計算向數據移動)
SN
  1. NN&DN
  2. 心跳機制
  3. DN向NN彙報block信息
安全模式
client
相關文章
相關標籤/搜索