1.冗余備份
HDFS將每個(gè)文件存儲(chǔ)成一系列數(shù)據(jù)塊(Block),默認(rèn)塊大小為64MB (可配置)。為了容錯(cuò),文件的所有數(shù)據(jù)塊都會(huì)有副本(副本數(shù)量即復(fù)制因子,可配置)。HDFS的文件都是一次性寫入的,并且嚴(yán)格限制為任何時(shí)候都只有一個(gè)寫用戶。DataNode使用本地文件系統(tǒng)存儲(chǔ)HDFS的數(shù)據(jù),但是它對(duì)HDFS的文件一無所知,只是用一個(gè)個(gè)文件存儲(chǔ)HDFS的每個(gè)數(shù)據(jù)塊。當(dāng)DataNode啟動(dòng)時(shí),它會(huì)遍歷本地文件系統(tǒng),產(chǎn)生一份HDFS數(shù)據(jù)塊和本地文件對(duì)應(yīng)關(guān)系的列表,并把這個(gè)報(bào)告發(fā)給NameNode,這就是塊報(bào)告(Blockreport)。塊報(bào)告包括了DataNode上所有塊的列表。
2.副本存放
HDFS集群一般運(yùn)行在多個(gè)機(jī)架上,不同機(jī)架上機(jī)器的通信需要通過交換機(jī)。通常情況下,副本的存放策略很關(guān)鍵,機(jī)架內(nèi)節(jié)點(diǎn)之間的帶寬比跨機(jī)架節(jié)點(diǎn)之間的帶寬要大,它能影響HDFS的可靠性和性能。HDFS采用機(jī)架感知(Rack-aware)的策略來改進(jìn)數(shù)據(jù)的可靠性、可用性和網(wǎng)絡(luò)帶寬的利用率。通過機(jī)架感知,NameNode可以確定每個(gè)DataNode所屬的機(jī)架ID。一般情況下,當(dāng)復(fù)制因子是3的時(shí)候,HDFS的部署策略是將一個(gè)副本放在同一機(jī)架上的另一個(gè)節(jié)點(diǎn),一個(gè)副本存放在本地機(jī)架上的節(jié)點(diǎn),最后一個(gè)副本放在不同機(jī)架上的節(jié)點(diǎn)。機(jī)架的錯(cuò)誤遠(yuǎn)比節(jié)點(diǎn)的錯(cuò)誤少,這個(gè)策略可以防止整個(gè)機(jī)架失效時(shí)數(shù)據(jù)丟失,不會(huì)影響到數(shù)據(jù)的可靠性和可用性,又能保證性能。目前,副本存放策略還正在開發(fā)中。圖6-2體現(xiàn)了復(fù)制因子為3的情況下,各數(shù)據(jù)塊的分布情況。
3.心跳檢測(cè)
NameNode周期性地從集群中的每個(gè)DataNode接受心跳包和塊報(bào)告,收到心跳包說明該DataNode工作正常。NameNode會(huì)標(biāo)記最近沒有心跳的DataNode為死機(jī),不會(huì)發(fā)給它們?nèi)魏涡碌腎/O請(qǐng)求。任何存儲(chǔ)在死機(jī)的DataNode的數(shù)據(jù)將不再有效,DataNode的死機(jī)會(huì)造成一些數(shù)據(jù)塊的副本數(shù)下降并低于指定值。NameNode會(huì)不斷檢測(cè)這些需要復(fù)制的數(shù)據(jù)塊,并在需要的時(shí)候重新復(fù)制。重新復(fù)制的引發(fā)可能有多種原因,比如DataNode不可用、數(shù)據(jù)副本的損壞、DataNode上的磁盤錯(cuò)誤或復(fù)制因子增大等。
4.安全模式
系統(tǒng)啟動(dòng)時(shí),NameNode會(huì)進(jìn)入一個(gè)安全模式。此時(shí)不會(huì)出現(xiàn)數(shù)據(jù)塊的寫操作。NameNode會(huì)收到各個(gè)DataNode擁有的數(shù)據(jù)塊列表對(duì)的數(shù)據(jù)塊報(bào)告,因此NameNode獲得所有的數(shù)據(jù)塊信息。數(shù)據(jù)塊達(dá)到最小副本數(shù)時(shí),該數(shù)據(jù)塊就被認(rèn)為是安全的。在一定比例(可配置)的數(shù)據(jù)塊被NameNode檢測(cè)確認(rèn)是袁幸之后,再等待若干時(shí)間,NameNode自動(dòng)退出安全模式狀態(tài)。當(dāng)檢測(cè)到副本數(shù)不足的數(shù)據(jù)塊時(shí),該塊會(huì)被復(fù)制到其他數(shù)據(jù)節(jié)點(diǎn),以達(dá)到最小副本數(shù)。
5.數(shù)據(jù)完整性檢測(cè)
多種原因會(huì)造成從DataNode獲取的數(shù)據(jù)塊有可能是損壞的。HDFS客戶端軟件實(shí)現(xiàn)了對(duì)HDFS文件內(nèi)容的校驗(yàn)和(Checksum)檢查,在HDFS文件創(chuàng)建時(shí),計(jì)算每個(gè)數(shù)據(jù)塊的校驗(yàn)和,并將校驗(yàn)和作為一個(gè)單獨(dú)的隱藏文件保存在命名空間下。當(dāng)客戶端獲取文件后,它會(huì)檢査從DataNode獲得的數(shù)據(jù)塊對(duì)應(yīng)的校驗(yàn)和是否和隱藏文件中的相同,如果不同,客戶端就會(huì)認(rèn)為數(shù)據(jù)塊有損壞,將從其他DataNode獲取該數(shù)據(jù)塊的副本。
6.空間回收
文件被用戶或應(yīng)用程序刪除時(shí),并不是立即就從HDFS中移走,而是先把蘆移動(dòng)到/trash自錄里。只要還在這個(gè)目錄里,文件就可以被迅速恢復(fù)。文件在這個(gè)目錄魚的時(shí)間是可以配置的,超過了這個(gè)時(shí)間,系統(tǒng)就會(huì)把它從命名空間中刪除件的刪除操作會(huì)引起相應(yīng)數(shù)據(jù)塊的釋放,但是從用戶執(zhí)行刪除操作到從系統(tǒng)中看到剩余空間的增加可能會(huì)有一個(gè)時(shí)間延遲。只要文件還在/trash目錄里,用戶可以取消刪除操作。當(dāng)用戶想取消時(shí),可以瀏覽這個(gè)目錄并取回文件,這個(gè)目錄只保存被刪除文件的最后副本。這個(gè)目錄還有一個(gè)特性,就是HDFS會(huì)使用特殊策略自動(dòng)刪除文件。當(dāng)前默認(rèn)的策略是:文件超過6個(gè)小時(shí)后自動(dòng)刪除,在未來版本里,這個(gè)策略可以通過定義良好的接口來配置。
7.元數(shù)據(jù)磁盤失效
映像文件和事務(wù)日志是HDFS的核心數(shù)據(jù)結(jié)構(gòu)。如果這些文件損壞,將會(huì)導(dǎo)致HDFS不可用。NameNode可以配置為支持維護(hù)映像文件和事務(wù)日志的多個(gè)副本,任何對(duì)映像文件或事務(wù)日志的修改,都將同步到它們的副本上。這樣會(huì)降低NameNodl處理命名空間事務(wù)的速度,然而這個(gè)代價(jià)是可以接受的,因?yàn)镠DFS是數(shù)據(jù)密集,而非元數(shù)據(jù)密集的。當(dāng)NameNode重新啟動(dòng)時(shí),總是選擇最新的一致的映像文件和事務(wù)日志。在HDFS集群中NameNode是單點(diǎn)存在的,如果它出現(xiàn)故障,必須手動(dòng)干預(yù)。目前,還不支持自動(dòng)重啟或切換到另外的NameNode。
8.快照
快照支持存儲(chǔ)某個(gè)時(shí)間的數(shù)據(jù)復(fù)制,當(dāng)HDFS數(shù)據(jù)損壞時(shí),可以回滾到過去一個(gè)已知正確的時(shí)間點(diǎn)。HDFS目前還不支持快照功能。