經(jīng)驗(yàn)總結(jié):Hadoop分布式文件系統(tǒng)中架構(gòu)和設(shè)計(jì)要點(diǎn)匯總
本節(jié)繼續(xù)向大家介紹一下Hadoop分布式文件系統(tǒng)中架構(gòu)和設(shè)計(jì)的要點(diǎn),本節(jié)主要包括四個(gè)部分,相信通過(guò)本節(jié)的介紹你對(duì)Hadoop分布式文件系統(tǒng)中架構(gòu)和設(shè)計(jì)的要點(diǎn)應(yīng)該有深刻的認(rèn)識(shí)。下面是具體介紹。
一、健壯性
Hadoop分布式文件系統(tǒng)HDFS的主要目標(biāo)就是實(shí)現(xiàn)在失敗情況下的數(shù)據(jù)存儲(chǔ)可靠性。常見(jiàn)的三種失敗:Namenodefailures,Datanodefailures和網(wǎng)絡(luò)分割(networkpartitions)。
1、硬盤(pán)數(shù)據(jù)錯(cuò)誤、心跳檢測(cè)和重新復(fù)制
每個(gè)Datanode節(jié)點(diǎn)都向Namenode周期性地發(fā)送心跳包。網(wǎng)絡(luò)切割可能導(dǎo)致一部分Datanode跟Namenode失去聯(lián)系。Namenode通過(guò)心跳包的缺失檢測(cè)到這一情況,并將這些Datanode標(biāo)記為dead,不會(huì)將新的IO請(qǐng)求發(fā)給它們。寄存在deadDatanode上的任何數(shù)據(jù)將不再有效。Datanode的死亡可能引起一些block的副本數(shù)目低于指定值,Namenode不斷地跟蹤需要復(fù)制的block,在任何需要的情況下啟動(dòng)復(fù)制。在下列情況可能需要重新復(fù)制:某個(gè)Datanode節(jié)點(diǎn)失效,某個(gè)副本遭到損壞,Datanode上的硬盤(pán)錯(cuò)誤,或者文件的replication因子增大。
2、集群均衡
HDFS支持?jǐn)?shù)據(jù)的均衡計(jì)劃,如果某個(gè)Datanode節(jié)點(diǎn)上的空閑空間低于特定的臨界點(diǎn),那么就會(huì)啟動(dòng)一個(gè)計(jì)劃自動(dòng)地將數(shù)據(jù)從一個(gè)Datanode搬移到空閑的Datanode。當(dāng)對(duì)某個(gè)文件的請(qǐng)求突然增加,那么也可能啟動(dòng)一個(gè)計(jì)劃創(chuàng)建該文件新的副本,并分布到集群中以滿足應(yīng)用的要求。這些均衡計(jì)劃目前還沒(méi)有實(shí)現(xiàn)。
3、數(shù)據(jù)完整性
從某個(gè)Datanode獲取的數(shù)據(jù)塊有可能是損壞的,這個(gè)損壞可能是由于Datanode的存儲(chǔ)設(shè)備錯(cuò)誤、網(wǎng)絡(luò)錯(cuò)誤或者軟件bug造成的。HDFS客戶端軟件實(shí)現(xiàn)了HDFS文件內(nèi)容的校驗(yàn)和。當(dāng)某個(gè)客戶端創(chuàng)建一個(gè)新的Hadoop分布式文件系統(tǒng)HDFS文件,會(huì)計(jì)算這個(gè)文件每個(gè)block的校驗(yàn)和,并作為一個(gè)單獨(dú)的隱藏文件保存這些校驗(yàn)和在同一個(gè)HDFSnamespace下。當(dāng)客戶端檢索文件內(nèi)容,它會(huì)確認(rèn)從Datanode獲取的數(shù)據(jù)跟相應(yīng)的校驗(yàn)和文件中的校驗(yàn)和是否匹配,如果不匹配,客戶端可以選擇從其他Datanode獲取該block的副本。
4、元數(shù)據(jù)磁盤(pán)錯(cuò)誤
FsImage和Editlog是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。這些文件如果損壞了,整個(gè)HDFS實(shí)例都將失效。因而,Namenode可以配置成支持維護(hù)多個(gè)FsImage和Editlog的拷貝。任何對(duì)FsImage或者Editlog的修改,都將同步到它們的副本上。這個(gè)同步操作可能會(huì)降低Namenode每秒能支持處理的namespace事務(wù)。這個(gè)代價(jià)是可以接受的,因?yàn)镠DFS是數(shù)據(jù)密集的,而非元數(shù)據(jù)密集。當(dāng)Namenode重啟的時(shí)候,它總是選取最近的一致的FsImage和Editlog使用。
Namenode在HDFS是單點(diǎn)存在,如果Namenode所在的機(jī)器錯(cuò)誤,手工的干預(yù)是必須的。目前,在另一臺(tái)機(jī)器上重啟因故障而停止服務(wù)的Namenode這個(gè)功能還沒(méi)實(shí)現(xiàn)。
5、快照
快照支持某個(gè)時(shí)間的數(shù)據(jù)拷貝,當(dāng)HDFS數(shù)據(jù)損壞的時(shí)候,可以恢復(fù)到過(guò)去一個(gè)已知正確的時(shí)間點(diǎn)。HDFS目前還不支持快照功能。
二、數(shù)據(jù)組織
1、數(shù)據(jù)塊
兼容Hadoop分布式文件系統(tǒng)(HDFS)的應(yīng)用都是處理大數(shù)據(jù)集合的。這些應(yīng)用都是寫(xiě)數(shù)據(jù)一次,讀卻是一次到多次,并且讀的速度要滿足流式讀。HDFS支持文件的write-once-read-many語(yǔ)義。一個(gè)典型的block大小是64MB,因而,文件總是按照64M切分成chunk,每個(gè)chunk存儲(chǔ)于不同的Datanode
2、步驟
某個(gè)客戶端創(chuàng)建文件的請(qǐng)求其實(shí)并沒(méi)有立即發(fā)給Namenode,事實(shí)上,HDFS客戶端會(huì)將文件數(shù)據(jù)緩存到本地的一個(gè)臨時(shí)文件。應(yīng)用的寫(xiě)被透明地重定向到這個(gè)臨時(shí)文件。當(dāng)這個(gè)臨時(shí)文件累積的數(shù)據(jù)超過(guò)一個(gè)block的大小(默認(rèn)64M),客戶端才會(huì)聯(lián)系Namenode。Namenode將文件名插入文件系統(tǒng)的層次結(jié)構(gòu)中,并且分配一個(gè)數(shù)據(jù)塊給它,然后返回Datanode的標(biāo)識(shí)符和目標(biāo)數(shù)據(jù)塊給客戶端??蛻舳藢⒈镜嘏R時(shí)文件flush到指定的Datanode上。當(dāng)文件關(guān)閉時(shí),在臨時(shí)文件中剩余的沒(méi)有flush的數(shù)據(jù)也會(huì)傳輸?shù)街付ǖ腄atanode,然后客戶端告訴Namenode文件已經(jīng)關(guān)閉。此時(shí)Namenode才將文件創(chuàng)建操作提交到持久存儲(chǔ)。如果Namenode在文件關(guān)閉前掛了,該文件將丟失。
上述方法是對(duì)通過(guò)對(duì)HDFS上運(yùn)行的目標(biāo)應(yīng)用認(rèn)真考慮的結(jié)果。如果不采用客戶端緩存,由于網(wǎng)絡(luò)速度和網(wǎng)絡(luò)堵塞會(huì)對(duì)吞估量造成比較大的影響。
3、流水線復(fù)制
當(dāng)某個(gè)客戶端向HDFS文件寫(xiě)數(shù)據(jù)的時(shí)候,一開(kāi)始是寫(xiě)入本地臨時(shí)文件,假設(shè)該文件的replication因子設(shè)置為3,那么客戶端會(huì)從Namenode獲取一張Datanode列表來(lái)存放副本。然后客戶端開(kāi)始向***個(gè)Datanode傳輸數(shù)據(jù),***個(gè)Datanode一小部分一小部分(4kb)地接收數(shù)據(jù),將每個(gè)部分寫(xiě)入本地倉(cāng)庫(kù),并且同時(shí)傳輸該部分到第二個(gè)Datanode節(jié)點(diǎn)。第二個(gè)Datanode也是這樣,邊收邊傳,一小部分一小部分地收,存儲(chǔ)在本地倉(cāng)庫(kù),同時(shí)傳給第三個(gè)Datanode,第三個(gè)Datanode就僅僅是接收并存儲(chǔ)了。這就是流水線式的復(fù)制。
三、可訪問(wèn)性
Hadoop分布式文件系統(tǒng)(HDFS)給應(yīng)用提供了多種訪問(wèn)方式,可以通過(guò)DFSShell通過(guò)命令行與HDFS數(shù)據(jù)進(jìn)行交互,可以通過(guò)javaAPI調(diào)用,也可以通過(guò)C語(yǔ)言的封裝API訪問(wèn),并且提供了瀏覽器訪問(wèn)的方式。正在開(kāi)發(fā)通過(guò)WebDav協(xié)議訪問(wèn)的方式。具體使用參考文檔。
四、空間的回收
1、文件的刪除和恢復(fù)
用戶或者應(yīng)用刪除某個(gè)文件,這個(gè)文件并沒(méi)有立刻從HDFS中刪除。相反,HDFS將這個(gè)文件重命名,并轉(zhuǎn)移到/trash目錄。當(dāng)文件還在/trash目錄時(shí),該文件可以被迅速地恢復(fù)。文件在/trash中保存的時(shí)間是可配置的,當(dāng)超過(guò)這個(gè)時(shí)間,Namenode就會(huì)將該文件從namespace中刪除。文件的刪除,也將釋放關(guān)聯(lián)該文件的數(shù)據(jù)塊。注意到,在文件被用戶刪除和HDFS空閑空間的增加之間會(huì)有一個(gè)等待時(shí)間延遲。
當(dāng)被刪除的文件還保留在/trash目錄中的時(shí)候,如果用戶想恢復(fù)這個(gè)文件,可以檢索瀏覽/trash目錄并檢索該文件。/trash目錄僅僅保存被刪除文件的最近一次拷貝。/trash目錄與其他文件目錄沒(méi)有什么不同,除了一點(diǎn):HDFS在該目錄上應(yīng)用了一個(gè)特殊的策略來(lái)自動(dòng)刪除文件,目前的默認(rèn)策略是刪除保留超過(guò)6小時(shí)的文件,這個(gè)策略以后會(huì)定義成可配置的接口。
2、Replication因子的減小
當(dāng)某個(gè)文件的replication因子減小,Namenode會(huì)選擇要?jiǎng)h除的過(guò)剩的副本。下次心跳檢測(cè)就將該信息傳遞給Datanode,Datanode就會(huì)移除相應(yīng)的block并釋放空間,同樣,在調(diào)用setReplication方法和集群中的空閑空間增加之間會(huì)有一個(gè)時(shí)間延遲。本節(jié)關(guān)于Hadoop分布式文件系統(tǒng)中架構(gòu)和設(shè)計(jì)的要點(diǎn)介紹到這里。
【編輯推薦】
- 學(xué)習(xí)筆記 Hadoop分布式文件系統(tǒng)中架構(gòu)和設(shè)計(jì)要點(diǎn)
- Hadoop分布式文件系統(tǒng)安全隱患不得不防
- Hadoop分布式文件系統(tǒng)詳解
- Hadoop集群搭建過(guò)程中相關(guān)環(huán)境配置詳解
- Hadoop完全分布模式安裝實(shí)現(xiàn)詳解