分佈式文件系統(HDFS)的高可靠性主要是由多種策略及機制共同作用實現的。
主要有:
冗餘副本策略
可以指定數據文件的副本數量,默認是3;
保證所有的數據塊都有副本,不至於在一個datanode宕機後,數據的丟失。
機架策略
集羣一般放在不同機架上,機架間帶寬要比機架內帶寬要小;
HDFS具有“機架感知”能力,它能自動實現在本機架上存放一個副本,然後在其它機架再存放另一副本,這樣可以防止機架失效時數據丟失,也可以提高帶寬利用率。
心跳機制
Namenode週期性從datanode接收心跳信號和塊報告,Namenode根據塊報告驗證元數據;
Namenode對沒有按時發送心跳的datanode會被標記爲宕機,不會再給它任何I/O請求;
datanode失效造成副本數量下降,並且低於預先設置的閾值,namenode會檢測出這些數據塊,並在合適的時機迕行重新複製;
引發重新複製的原因還包括數據副本本身損壞、磁盤錯誤,複製因子被增大等。
Namenode對沒有按時發送心跳的datanode會被標記爲宕機,不會再給它任何I/O請求;
datanode失效造成副本數量下降,並且低於預先設置的閾值,namenode會檢測出這些數據塊,並在合適的時機迕行重新複製;
引發重新複製的原因還包括數據副本本身損壞、磁盤錯誤,複製因子被增大等。
安全模式
Namenode啓動時會先經過一個“安全模式”階段,安全模式階段不會產生數據寫;
在安全模式階段Namenode收集各個datanode的報告,當數據塊達到最小副本數以上時,會被認爲是“安全”的;
在一定比例(可設置)的數據塊被確定爲“安全”後,再過若干時間,安全模式結束;
當檢測到副本數不足的數據塊時,該塊會被複制直到達到最小副本數。
在安全模式階段Namenode收集各個datanode的報告,當數據塊達到最小副本數以上時,會被認爲是“安全”的;
在一定比例(可設置)的數據塊被確定爲“安全”後,再過若干時間,安全模式結束;
當檢測到副本數不足的數據塊時,該塊會被複制直到達到最小副本數。
校驗和
在文件建立時,每個數據塊都產生校驗和,校驗和會保存在.meta文件內;
客戶端獲取數據時可以檢查校驗和是否相同,從而發現數據塊是否損壞;
如果正在讀取的數據塊損壞,則可以繼續讀取其它副本。
客戶端獲取數據時可以檢查校驗和是否相同,從而發現數據塊是否損壞;
如果正在讀取的數據塊損壞,則可以繼續讀取其它副本。
回收站
刪除文件時,其實是放入回收站/trash,回收站裏的文件可以快速恢復;
可以設置一個時間閾值,當回收站裏文件的存放時間超過這個閾值,就被徹底刪除,並且釋放佔用的數據塊。
可以設置一個時間閾值,當回收站裏文件的存放時間超過這個閾值,就被徹底刪除,並且釋放佔用的數據塊。
元數據保護
映像文件和事務日誌是Namenode的核心數據,可以配置爲擁有多個副本;
副本會降低Namenode的處理速度,但增加安全性。
副本會降低Namenode的處理速度,但增加安全性。