RAID將數(shù)據(jù)分片后在多塊磁盤上并發(fā)進行讀寫訪問睛蛛,從而提高了存儲容量纵诞、加快了訪問速度苞七,并通過數(shù)據(jù)的冗余校驗提高了數(shù)據(jù)的可靠性辕翰,即使某塊磁盤損壞也不會丟失數(shù)據(jù)夺衍。將RAID的設計理念擴大到整個分布式服務器集群,就產(chǎn)生了分布式文件系統(tǒng)金蜀,Hadoop分布式文件系統(tǒng)的核心原理就是如此刷后。
HDFS是在一個大規(guī)模分布式服務器集群上,對數(shù)據(jù)分片后進行并行讀寫及冗余存儲渊抄。因為HDFS可以部署在一個比較大的服務器集群上尝胆,集群中所有服務器的磁盤都可供HDFS使用,所以整個HDFS的存儲空間可以達到PB級容量护桦。
從圖中你可以看到HDFS的關鍵組件有兩個含衔,一個是DataNode,一個是NameNode二庵。
DataNode
負責文件數(shù)據(jù)的存儲和讀寫操作贪染,HDFS將文件數(shù)據(jù)分割成若干數(shù)據(jù)塊(Block),每個DataNode存儲一部分數(shù)據(jù)塊催享,這樣文件就分布存儲在整個HDFS服務器集群中杭隙。NameNode
負責整個分布式文件系統(tǒng)的元數(shù)據(jù)(MetaData)管理,也就是文件路徑名因妙、數(shù)據(jù)塊的ID以及存儲位置等信息痰憎,相當于操作系統(tǒng)中文件分配表(FAT)的角色票髓。
HDFS的高可用設計
1.數(shù)據(jù)存儲故障容錯
磁盤介質(zhì)在存儲過程中受環(huán)境或者老化影響,其存儲的數(shù)據(jù)可能會出現(xiàn)錯亂铣耘。HDFS的應對措施是洽沟,對于存儲在DataNode上的數(shù)據(jù)塊,計算并存儲校驗和(CheckSum)蜗细。在讀取數(shù)據(jù)的時候裆操,重新計算讀取出來的數(shù)據(jù)的校驗和,如果校驗不正確就拋出異常炉媒,應用程序捕獲異常后就到其他DataNode上讀取備份數(shù)據(jù)踪区。2.磁盤故障容錯
如果DataNode監(jiān)測到本機的某塊磁盤損壞,就將該塊磁盤上存儲的所有BlockID報告給NameNode橱野,NameNode檢查這些數(shù)據(jù)塊還在哪些DataNode上有備份朽缴,通知相應的DataNode服務器將對應的數(shù)據(jù)塊復制到其他服務器上,以保證數(shù)據(jù)塊的備份數(shù)滿足要求水援。3.DataNode故障容錯
DataNode會通過心跳和NameNode保持通信密强,如果DataNode超時未發(fā)送心跳,NameNode就會認為這個DataNode已經(jīng)宕機失效蜗元,立即查找這個DataNode上存儲的數(shù)據(jù)塊有哪些或渤,以及這些數(shù)據(jù)塊還存儲在哪些服務器上,隨后通知這些服務器再復制一份數(shù)據(jù)塊到其他服務器上奕扣,保證HDFS存儲的數(shù)據(jù)塊備份數(shù)符合用戶設置的數(shù)目薪鹦,即使再出現(xiàn)服務器宕機,也不會丟失數(shù)據(jù)惯豆。4.NameNode故障容錯
NameNode是整個HDFS的核心池磁,記錄著HDFS文件分配表信息,所有的文件路徑和數(shù)據(jù)塊存儲信息都保存在NameNode楷兽,如果NameNode故障地熄,整個HDFS系統(tǒng)集群都無法使用;如果NameNode上記錄的數(shù)據(jù)丟失芯杀,整個集群所有DataNode存儲的數(shù)據(jù)也就沒用了端考。
所以,NameNode高可用容錯能力非常重要揭厚。NameNode采用主從熱備的方式提供高可用服務却特,請看下圖。
集群部署兩臺NameNode服務器筛圆,一臺作為主服務器提供服務裂明,一臺作為從服務器進行熱備,兩臺服務器通過ZooKeeper選舉太援,主要是通過爭奪znode鎖資源闽晦,決定誰是主服務器轰绵。而DataNode則會向兩個NameNode同時發(fā)送心跳數(shù)據(jù),但是只有主NameNode才能向DataNode返回控制信息尼荆。
正常運行期間,主從NameNode之間通過一個共享存儲系統(tǒng)shared edits來同步文件系統(tǒng)的元數(shù)據(jù)信息唧垦。當主NameNode服務器宕機捅儒,從NameNode會通過ZooKeeper升級成為主服務器,并保證HDFS集群的元數(shù)據(jù)信息振亮,也就是文件分配表信息完整一致巧还。