Block(數(shù)據(jù)塊):
- HDFS上面基本默認的基本存儲單位耕魄,大小一般為128M
- 一個大的文件會被拆分成一個個的數(shù)據(jù)塊零酪,然后存儲在不同的機器奋刽。若小于block的大小,則實際占用的空間為其文件的大小
- 基本的讀寫單位茫藏,每次讀的都是一個塊碴裙,每個塊都會被復制到多臺機器
HDFS采用的是master/slave 架構稠炬。一個HDFS集群是由一個NameNode和多個DataNode構成沮趣。
NameNode(元數(shù)據(jù)節(jié)點)和DataNode(數(shù)據(jù)節(jié)點):
NameNode是集群的中心服務器屯烦,負責管理集群,以及存儲元數(shù)據(jù),DataNode就是真正存儲數(shù)據(jù)的節(jié)點驻龟。
NameNode作為集群的中心服務器温眉,主要存儲兩個東西:
- 所有數(shù)據(jù)的命名空間(Namespace Image),包括文件名翁狐,副本數(shù)类溢,文件路徑等
- 用戶對數(shù)據(jù)的操作日志(edit log)
DataNode會以數(shù)據(jù)塊的形式存儲數(shù)據(jù)。負責處理Client的讀寫數(shù)據(jù)的請求露懒,并周期性發(fā)送心跳信號和塊狀態(tài)報告到NameNode闯冷。DataNode之間也會進行通信,復制數(shù)據(jù)塊懈词,保證數(shù)據(jù)的冗余性
4190914-482bdf7b058b8c1c.png
NameNode的單點問題:
Namenode是整個分布式文件系統(tǒng)的一個單點故障窃躲,一旦故障,整個分布式文件系統(tǒng)就無法使用了钦睡,因為無法從blocks中重構出相應的文件了。所以確保Namenode能從失敗中及時恢復是很重要的一件事躁倒。
一般應對的方法有兩種:
- 備份NameNode中保存的永久信息
保存多份數(shù)據(jù)荞怒,最常用的做法是把永久信息保存到本地文件系統(tǒng)和某個遠程NFS上去。這些多寫操作是同步和原子性的秧秉,因為NameNode上都是源數(shù)據(jù)褐桌,寫少讀多,每次保存的量比較小象迎,消耗一些寫的性能荧嵌,來保證集群的健壯,還是值得的砾淌。 - 運行一個Secondary NameNode
它最主要的工作就是把namespace image檢查點文件與edit log相融合(以防止edit log過大)并把融合后的namespace image保存在自己的本地文件系統(tǒng)上啦撮,同時發(fā)送這個新的備份給namenode。
由于secondary namenode上保存的狀態(tài)信息總是要滯后于namenode上的狀態(tài)信息的緣故(未融合的edit log記錄了這一部分改變)汪厨,如果namenode完全失敗赃春,數(shù)據(jù)肯定要丟失一部分。
最保險最常用的方式劫乱,是把上述兩種方法結合起來织中,也即當namenode故障時,把遠端NFS上的namespace image拷貝到secondary namenode上衷戈,然后把secondary namenode當做namenode來運行狭吼。
DataNode的數(shù)據(jù)存儲和讀取:
-
寫入數(shù)據(jù):
4190914-3c29b45ea3f3c31a.png -
讀取數(shù)據(jù):
4190914-5e7e9202d5819b72.png