Hadoop分布式文件系統(tǒng)(HDFS)被設(shè)計(jì)成適合運(yùn)行在通用硬件(commodity hardware)上的分布式文件系統(tǒng)。它和現(xiàn)有的分布式文件系統(tǒng)有很多共同點(diǎn)。但同時(shí),它和其他的分布式文件系統(tǒng)的區(qū)別也是很明顯的。HDFS是一個(gè)高度容錯(cuò)性的系統(tǒng),適合部署在廉價(jià)的機(jī)器上。HDFS能提供高吞吐量的數(shù)據(jù)訪問(wèn),非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS放寬了一部分POSIX約束,來(lái)實(shí)現(xiàn)流式讀取文件系統(tǒng)數(shù)據(jù)的目的。HDFS在最開(kāi)始是作為Apache Nutch搜索引擎項(xiàng)目的基礎(chǔ)架構(gòu)而開(kāi)發(fā)的。HDFS是Apache Hadoop Core項(xiàng)目的一部分。
HDFS有著高容錯(cuò)性(fault-tolerant)的特點(diǎn),并且設(shè)計(jì)用來(lái)部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)來(lái)訪問(wèn)應(yīng)用程序的數(shù)據(jù),適合那些有著超大數(shù)據(jù)集(large data set)的應(yīng)用程序。HDFS放寬了(relax)POSIX的要求(requirements)這樣可以實(shí)現(xiàn)流的形式訪問(wèn)(streaming access)文件系統(tǒng)中的數(shù)據(jù)。
全稱(chēng) | Hadoop Distributed File System | 簡(jiǎn)稱(chēng) | hdfs |
---|---|---|---|
實(shí)質(zhì) | 分布式文件系統(tǒng) | 作用 | 作為Apache Nutch的基礎(chǔ)架構(gòu) |
特點(diǎn) | 高容錯(cuò)性 | 適用 | 大規(guī)模數(shù)據(jù)集 |
HDFS是什么?
HDFS 全稱(chēng) Hadoop Distributed File System ,簡(jiǎn)稱(chēng)HDFS,是一個(gè)分布式文件系統(tǒng)。它是谷歌的GFS提出之后出現(xiàn)的另外一種文件系統(tǒng)。它有一定高度的容錯(cuò)性,而且提供了高吞吐量的數(shù)據(jù)訪問(wèn),非常適合大規(guī)模數(shù)據(jù)集上的應(yīng)用。HDFS 提供了一個(gè)高度容錯(cuò)性和高吞吐量的海量數(shù)據(jù)存儲(chǔ)解決方案。
優(yōu)點(diǎn)
1、存儲(chǔ)超大文件
2、標(biāo)準(zhǔn)流式訪問(wèn):“一次寫(xiě)入,多次讀取”
3、運(yùn)行在廉價(jià)的商用機(jī)器集群上
不足
1、不能滿(mǎn)足低延遲的數(shù)據(jù)訪問(wèn)
2、無(wú)法高效存儲(chǔ)大量小文件
3、暫時(shí)不支持多用戶(hù)寫(xiě)入及隨意修改文件
HDFS概念理解
hdfs架構(gòu)圖如下:
1、文件塊(圖中1、2、3、4帶顏色的小正方形)
文件分成塊存儲(chǔ)(默認(rèn)64M,如今版本是128是M),多臺(tái)計(jì)算機(jī)存儲(chǔ)。DateNode中存儲(chǔ)以數(shù)字編號(hào)的方塊(見(jiàn)上圖)用于備份,每個(gè)塊都會(huì)復(fù)制到幾臺(tái)機(jī)器上(默認(rèn)3臺(tái)),如果一個(gè)塊不可用,可從其它地方讀取副本。副本是3,表示一共3處有該塊。如果配置文件中副本設(shè)置為 4 ,但是結(jié)果只有2臺(tái)datanode,最后副本還是2
1000個(gè)1M的小文件會(huì)占用1024個(gè)塊和1024個(gè) inode,但是他只是占用1個(gè)塊中的1M,不會(huì)占用整個(gè)空間,不過(guò)由于inode存儲(chǔ)在NameNode的內(nèi)存里,如果NameNode內(nèi)存不足以存儲(chǔ)inode,那么就不能再存儲(chǔ)文件了、所以說(shuō)HDFS并不適合存儲(chǔ)小文件,有時(shí)候還要將小文件合并為大文件。
顯示塊信息命令:
hdfs fsck / -files –blocks //列出根目錄下各個(gè)文件由哪些塊存儲(chǔ)。
//它只是從NameNode獲取信息,不與DateNode交互。
2、 NameNode和DataNode
NameNode(名字節(jié)點(diǎn)): 管理文件系統(tǒng)命名空間;維護(hù)文件系統(tǒng)樹(shù)內(nèi)所有文件和目錄,記錄每個(gè)文件在哪個(gè)DateNode的位置和副本信息,協(xié)調(diào)客戶(hù)端對(duì)文件的訪問(wèn)。 以?xún)煞N文件格式存在:
fsimage_*:元數(shù)據(jù)鏡像文件,即系統(tǒng)的目錄樹(shù),包括文件目錄和inodes元信息(文件名,文件大小,創(chuàng)建時(shí)間,備份級(jí)別,訪問(wèn)權(quán)限,block的size,所有block的構(gòu)成),每個(gè)inode是hdfs的一個(gè)代表文件或者目錄的元數(shù)據(jù)。這個(gè)鏡像文件相當(dāng)于hdfs的元數(shù)據(jù)額數(shù)據(jù)庫(kù)文件。
edits_*:編輯日志文件,也就是事務(wù)日志文件,也就是針對(duì)文件系統(tǒng)做的修改操作記錄,記錄元數(shù)據(jù)的變化,相當(dāng)于操作日志文件。一個(gè)文件的創(chuàng)建,追加,移動(dòng)等。 NameNode內(nèi)存中存儲(chǔ)的是=fsimage+edits 檢查點(diǎn):NameNode啟動(dòng)時(shí),從磁盤(pán)中讀取上面兩種文件,然后把edits_*里面記錄的事務(wù)全部刷新到 fsimage_*中,這樣就截去了舊的edits_*事務(wù)日志,這個(gè)過(guò)程叫checkpoint。
上面文件在~/hadoop-2.6/dfs/name/current目錄下(在hdfs-site.xml) ,除此之外,還有VERSION(版本信息,包含文件系統(tǒng)唯一標(biāo)識(shí)符)和seen_txid(事務(wù)管理,里面保存一個(gè)整數(shù),表示edits_*的尾數(shù))兩個(gè)文件。
DataNode(數(shù)據(jù)節(jié)點(diǎn)):存儲(chǔ),檢索數(shù)據(jù)塊。定期向NameNode發(fā)送所存儲(chǔ)的塊的列表。存儲(chǔ)的塊大小是64M,并且盡量把數(shù)據(jù)塊分布不同的DateNode節(jié)點(diǎn)上。
上圖某文件被分成4塊,在多個(gè)DataNode中存儲(chǔ),而且每塊都復(fù)制兩個(gè)備份,存儲(chǔ)在其它DataNode中。這些數(shù)據(jù)的存儲(chǔ)目錄/home/hduser/hadoop-2.6/dfs/data(dfs-site.xml中指定)。例如下面文件:/home/hduser/hadoop-2.6/dfs/data/current/BP-1111-ip-2222/current/finalized/subbdir0/sudir0,該目錄下的文件包括blk_{id}和blk_{id}.meta,前者是二進(jìn)制格式的數(shù)據(jù)塊,后者是數(shù)據(jù)塊的元信息(版本信息,類(lèi)型信息 )
DataNode負(fù)責(zé)處理文件系統(tǒng)客戶(hù)端的文件讀寫(xiě)請(qǐng)求,并在NameNode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)的創(chuàng)建,刪除和復(fù)制工作。如果NameNode數(shù)據(jù)損壞,HDFS所有文件都不能訪問(wèn),為了保證高可用性,Hadoop對(duì)NameNode進(jìn)行了補(bǔ)充,即Sencondary NameNode。
3、 Secondary NameNode結(jié)點(diǎn)
系統(tǒng)同步運(yùn)行一個(gè)Secondary NameNode,也稱(chēng)二級(jí)NameNode,周期的備份NameNode,它可以用來(lái)恢復(fù)NameNode。由于有一定的滯后,所以會(huì)帶來(lái)數(shù)據(jù)的損失。為了防止宕機(jī),一般我們會(huì)把它放在另外一臺(tái)計(jì)算機(jī)。使用hdfs-site.xml中dfs.namenode.secondary.http-address屬性可以通過(guò)瀏覽器查看Secondary NameNode的運(yùn)行狀態(tài)。 默認(rèn)是1小時(shí),從NameNode獲取fsimage和edits進(jìn)行合并,然后再發(fā)送給namenode,減少namenode的工作量。
HDFS體系架構(gòu)
HDFS采用master/slave架構(gòu)。一個(gè)HDFS集群是由一個(gè)Namenode和一定數(shù)目的Datanodes組成。Namenode是一個(gè)中心服務(wù)器,負(fù)責(zé)管理文件系統(tǒng)的名字空間(namespace)以及客戶(hù)端對(duì)文件的訪問(wèn)。集群中的Datanode一般是一個(gè)節(jié)點(diǎn)一個(gè),負(fù)責(zé)管理它所在節(jié)點(diǎn)上的存儲(chǔ)。HDFS暴露了文件系統(tǒng)的名字空間,用戶(hù)能夠以文件的形式在上面存儲(chǔ)數(shù)據(jù)。從內(nèi)部看,一個(gè)文件其實(shí)被分成一個(gè)或多個(gè)數(shù)據(jù)塊,這些塊存儲(chǔ)在一組Datanode上。Namenode執(zhí)行文件系統(tǒng)的名字空間操作,比如打開(kāi)、關(guān)閉、重命名文件或目錄。它也負(fù)責(zé)確定數(shù)據(jù)塊到具體Datanode節(jié)點(diǎn)的映射。Datanode負(fù)責(zé)處理文件系統(tǒng)客戶(hù)端的讀寫(xiě)請(qǐng)求。在Namenode的統(tǒng)一調(diào)度下進(jìn)行數(shù)據(jù)塊的創(chuàng)建、刪除和復(fù)制。 一次寫(xiě),多次讀?。阂粋€(gè)文件一旦創(chuàng)建,寫(xiě)入,關(guān)閉之后就不需要修改了。
讀寫(xiě)流程如下: 讀流程:客戶(hù)端向NameNode請(qǐng)求訪問(wèn)某個(gè)文件,NameNode返回該文件位置在哪個(gè)DataNode上,然后客戶(hù)端從DataNode上讀取數(shù)據(jù)。 寫(xiě)流程:客戶(hù)端向NameNode發(fā)出寫(xiě)文件寫(xiě)請(qǐng)求,NameNode告訴客戶(hù)端向哪個(gè)DataNode寫(xiě)文件,然后客戶(hù)端將文件寫(xiě)入該DataNode節(jié)點(diǎn),隨后該 DataNode將該文件自動(dòng)復(fù)制到其它DataNode節(jié)點(diǎn)上,默認(rèn)三份備份。
HDFS常見(jiàn)節(jié)點(diǎn)管理:1 節(jié)點(diǎn)添加 可擴(kuò)展性是一個(gè)重要特征,往HDFS集群中添加一個(gè)節(jié)點(diǎn)步驟如下:
1) 對(duì)新節(jié)點(diǎn)進(jìn)行系統(tǒng)配置(hostname,hosts,jdk,防火墻等)
2) 對(duì)新節(jié)點(diǎn)進(jìn)行hadoop的安裝和配置,和其它DataNode一樣。
3) 在NameNode中修改~/hadoop-2.6/etc/hadoop/Slaves文件,加入新節(jié)點(diǎn)名稱(chēng)。
4) 啟動(dòng)(start-all.sh,或者start-dfs.sh,start-yarn.sh)
2 負(fù)載均衡 HDFS的數(shù)據(jù)在各個(gè)DataNode中的分布可能不均勻,尤其是DataNode出現(xiàn)故障或者新增節(jié)點(diǎn)時(shí),采用下面命令可以重新平衡DataNode的數(shù)據(jù)塊分布: $start-balancer.sh
3 安全機(jī)制 由于NameNode統(tǒng)一調(diào)度,沒(méi)有它文件系統(tǒng)無(wú)法使用,采用下面兩種機(jī)制確保其安全:
1) 把NameNode存儲(chǔ)的元數(shù)據(jù)轉(zhuǎn)移到其它文件系統(tǒng)上。
2) 使用Secondary NameNode同步備份。
加米谷大數(shù)據(jù)是一家專(zhuān)注于大數(shù)據(jù)培訓(xùn)的機(jī)構(gòu),提供個(gè)人培訓(xùn)和企業(yè)內(nèi)訓(xùn);如果您是0基礎(chǔ)學(xué)習(xí)大數(shù)據(jù)或者轉(zhuǎn)行大數(shù)據(jù)行業(yè),歡迎實(shí)地了解考察!
本書(shū)以云計(jì)算與大數(shù)據(jù)基礎(chǔ)開(kāi)篇,簡(jiǎn)單介紹了分布式文件系統(tǒng)HDFS與NoSQL數(shù)據(jù)庫(kù)技術(shù),重點(diǎn)對(duì)分布式計(jì)算框架MapReduce、Hadoop技術(shù)、云數(shù)據(jù)中心、大數(shù)據(jù)與數(shù)據(jù)挖掘技術(shù)進(jìn)行了闡述。 2100433B