1.冗余備份
HDFS將每個文件存儲成一系列數據塊(Block),默認塊大小為64MB (可配置)。為了容錯,文件的所有數據塊都會有副本(副本數量即復制因子,可配置)。HDFS的文件都是一次性寫入的,并且嚴格限制為任何時候都只有一個寫用戶。DataNode使用本地文件系統(tǒng)存儲HDFS的數據,但是它對HDFS的文件一無所知,只是用一個個文件存儲HDFS的每個數據塊。當DataNode啟動時,它會遍歷本地文件系統(tǒng),產生一份HDFS數據塊和本地文件對應關系的列表,并把這個報告發(fā)給NameNode,這就是塊報告(Blockreport)。塊報告包括了DataNode上所有塊的列表。
2.副本存放
HDFS集群一般運行在多個機架上,不同機架上機器的通信需要通過交換機。通常情況下,副本的存放策略很關鍵,機架內節(jié)點之間的帶寬比跨機架節(jié)點之間的帶寬要大,它能影響HDFS的可靠性和性能。HDFS采用機架感知(Rack-aware)的策略來改進數據的可靠性、可用性和網絡帶寬的利用率。通過機架感知,NameNode可以確定每個DataNode所屬的機架ID。一般情況下,當復制因子是3的時候,HDFS的部署策略是將一個副本放在同一機架上的另一個節(jié)點,一個副本存放在本地機架上的節(jié)點,最后一個副本放在不同機架上的節(jié)點。機架的錯誤遠比節(jié)點的錯誤少,這個策略可以防止整個機架失效時數據丟失,不會影響到數據的可靠性和可用性,又能保證性能。目前,副本存放策略還正在開發(fā)中。圖6-2體現(xiàn)了復制因子為3的情況下,各數據塊的分布情況。

3.心跳檢測
NameNode周期性地從集群中的每個DataNode接受心跳包和塊報告,收到心跳包說明該DataNode工作正常。NameNode會標記最近沒有心跳的DataNode為死機,不會發(fā)給它們任何新的I/O請求。任何存儲在死機的DataNode的數據將不再有效,DataNode的死機會造成一些數據塊的副本數下降并低于指定值。NameNode會不斷檢測這些需要復制的數據塊,并在需要的時候重新復制。重新復制的引發(fā)可能有多種原因,比如DataNode不可用、數據副本的損壞、DataNode上的磁盤錯誤或復制因子增大等。
4.安全模式
系統(tǒng)啟動時,NameNode會進入一個安全模式。此時不會出現(xiàn)數據塊的寫操作。NameNode會收到各個DataNode擁有的數據塊列表對的數據塊報告,因此NameNode獲得所有的數據塊信息。數據塊達到最小副本數時,該數據塊就被認為是安全的。在一定比例(可配置)的數據塊被NameNode檢測確認是袁幸之后,再等待若干時間,NameNode自動退出安全模式狀態(tài)。當檢測到副本數不足的數據塊時,該塊會被復制到其他數據節(jié)點,以達到最小副本數。
5.數據完整性檢測
多種原因會造成從DataNode獲取的數據塊有可能是損壞的。HDFS客戶端軟件實現(xiàn)了對HDFS文件內容的校驗和(Checksum)檢查,在HDFS文件創(chuàng)建時,計算每個數據塊的校驗和,并將校驗和作為一個單獨的隱藏文件保存在命名空間下。當客戶端獲取文件后,它會檢査從DataNode獲得的數據塊對應的校驗和是否和隱藏文件中的相同,如果不同,客戶端就會認為數據塊有損壞,將從其他DataNode獲取該數據塊的副本。
6.空間回收
文件被用戶或應用程序刪除時,并不是立即就從HDFS中移走,而是先把蘆移動到/trash自錄里。只要還在這個目錄里,文件就可以被迅速恢復。文件在這個目錄魚的時間是可以配置的,超過了這個時間,系統(tǒng)就會把它從命名空間中刪除件的刪除操作會引起相應數據塊的釋放,但是從用戶執(zhí)行刪除操作到從系統(tǒng)中看到剩余空間的增加可能會有一個時間延遲。只要文件還在/trash目錄里,用戶可以取消刪除操作。當用戶想取消時,可以瀏覽這個目錄并取回文件,這個目錄只保存被刪除文件的最后副本。這個目錄還有一個特性,就是HDFS會使用特殊策略自動刪除文件。當前默認的策略是:文件超過6個小時后自動刪除,在未來版本里,這個策略可以通過定義良好的接口來配置。
7.元數據磁盤失效
映像文件和事務日志是HDFS的核心數據結構。如果這些文件損壞,將會導致HDFS不可用。NameNode可以配置為支持維護映像文件和事務日志的多個副本,任何對映像文件或事務日志的修改,都將同步到它們的副本上。這樣會降低NameNodl處理命名空間事務的速度,然而這個代價是可以接受的,因為HDFS是數據密集,而非元數據密集的。當NameNode重新啟動時,總是選擇最新的一致的映像文件和事務日志。在HDFS集群中NameNode是單點存在的,如果它出現(xiàn)故障,必須手動干預。目前,還不支持自動重啟或切換到另外的NameNode。
8.快照
快照支持存儲某個時間的數據復制,當HDFS數據損壞時,可以回滾到過去一個已知正確的時間點。HDFS目前還不支持快照功能。