HDFS(The Hadoop Distributed File System)是Hadoop的可以運行在普通硬件上的分布式文件系統(tǒng)外莲。
1.HDFS特點
1.1 高容錯率
HDFS把硬件故障看做常態(tài),來做設計绷蹲。增加數(shù)據(jù)副本简识,冗余存儲,利用集群的優(yōu)勢,使數(shù)據(jù)高可用斯棒。集群本身也有錯誤檢測和快速、自動的恢復機制主经。
1.2 流式數(shù)據(jù)訪問
HDFS是建立在一次寫多次讀
的模式的概念之上的荣暮,HDFS存儲的數(shù)據(jù)集作為hadoop的分析對象。在數(shù)據(jù)集生成后罩驻,長時間在此數(shù)據(jù)集上進行各種分析穗酥。每次分析都將設計該數(shù)據(jù)集的大部分數(shù)據(jù)甚至全部數(shù)據(jù)称诗,因此使用場景大多是蛾坯,讀取整個數(shù)據(jù)集通贞。流式讀取最小化了硬盤的尋址開銷取具,只需要尋址一次实抡,然后就一直讀弛房。對于大文件的特點也更適合流式讀取皆辽。
與流數(shù)據(jù)訪問對應的是隨機數(shù)據(jù)訪問
跛梗,它要求定位透绩、查詢或修改數(shù)據(jù)的延遲較小翘骂,比較適合于創(chuàng)建數(shù)據(jù)后再多次讀寫的情況,如傳統(tǒng)的關(guān)系型數(shù)據(jù)庫帚豪。
1.3 適合超大數(shù)據(jù)集
1.4 移動計算比移動數(shù)據(jù)更經(jīng)濟
把與計算相關(guān)的邏輯碳竟,盡量晚的執(zhí)行。每個節(jié)點計算完成以后志鞍,再移動數(shù)據(jù)匯總瞭亮,而不是把數(shù)據(jù)匯總之后再進行計算。樣就能降低網(wǎng)絡阻塞的影響固棚,提高系統(tǒng)數(shù)據(jù)的吞吐量统翩。
2.Namenode 和 Datanode
HDFS采用master/slave
架構(gòu)。一個HDFS集群是由一個Namenode和多個的Datanode組成此洲。顧名思義厂汗,Namenode是集群的中心服務器,負責管理集群呜师,以及存儲元數(shù)據(jù)娶桦,Datanode就是真正存儲數(shù)據(jù)的節(jié)點。
Namenode作為集群的中心服務器,主要存儲兩個東西:
1)所有數(shù)據(jù)的命名空間(Namespace Image)衷畦,包括文件名栗涂,副本數(shù),文件路徑等
2)用戶對數(shù)據(jù)的操作日志(edit log)
Datanode會以塊
的形式祈争,存儲數(shù)據(jù)斤程。負責處理Client的讀寫數(shù)據(jù)的請求,并周期性發(fā)送心跳信號和塊狀態(tài)報告(Blockreport)到Namenode菩混。
2.1 Namenode的單點問題
Namenode是整個分布式文件系統(tǒng)的一個單點故障(single point of failure)忿墅,一旦故障,整個分布式文件系統(tǒng)就無法使用了沮峡,因為無法從blocks中重構(gòu)出相應的文件了疚脐。所以確保Namenode能從失敗中及時恢復是很重要的一件事。
應對故障一般有兩種做法:
2.1.1 備份Namenode中保存的永久信息
保存多份數(shù)據(jù)邢疙,最常用的做法是把永久信息保存到本地文件系統(tǒng)和某個遠程NFS(Network FileSystem)上去棍弄。這些多寫操作是同步和原子性的,因為Namenode上都是源數(shù)據(jù)疟游,寫少讀多照卦,每次保存的量比較小,消耗一些寫的性能乡摹,來保證集群的健壯,還是值得的采转。
2.1.2 運行一個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ù)肯定要丟失一部分。
最保險最常用的方式察绷,是把上述兩種方法結(jié)合起來干签,也即當namenode故障時,把遠端NFS上的namespace image拷貝到secondary namenode上拆撼,然后把secondary namenode當做namenode來運行容劳。
2.2 DataNode的數(shù)據(jù)存儲和讀取
HDFS把文件轉(zhuǎn)化為另一種數(shù)據(jù)格式,并以Block的形式闸度,分散存儲在每一個DataNode上竭贩。
其中Block的默認大小是128M,HDFS為了保證數(shù)據(jù)的安全莺禁,會把同一份Block復制多份副本留量,分別存儲在不同的DataNode上,默認是3個副本。
下面是HDFS寫入數(shù)據(jù)的過程:
下面是HDFS讀取數(shù)據(jù)的過程:
3.結(jié)尾
HDFS是Hadoop的主要功能之一楼熄,Hadoop的所有計算忆绰,都是基于HDFS的存儲結(jié)構(gòu)之上的。所以要先梳理好HDFS的基本結(jié)構(gòu)可岂。