HDFS數據完整性node
用戶但願存儲和處理數據的時候,不會有任何損失或者損壞。算法
Hadoop提供兩種校驗oop
一、校驗和 經常使用的錯誤檢測碼是:CRC-32(循環冗餘校驗)使用CRC-32算法任何大小的數據輸入均計算獲得一個32位的整數校驗碼。日誌
二、運行後臺進程來檢測數據塊進程
校驗和get
一、寫入數據節點驗證後臺
Hdfs會對寫入的全部數據計算校驗和,並在讀取數據時驗證校驗和。元數據節點負責在驗證收到的數據後,存儲數據及其校驗和。在收到客戶端數據或複製其餘datanode的數據時執行。正在寫數據的客戶端將數據及其校驗和發送到一系列數據節點組成的管道,管線的最後一個數據節點負責驗證校驗和。file
二、讀取數據節點驗證循環
客戶端讀取數據節點數據也會驗證校驗和,將他們與數據節點種存儲的校驗和進行比較。每一個數據節點都持久化一個用於驗證的校驗和日誌。客戶端成功驗證一個數據塊後,會告訴這個數據節點,數據節點由此更新日誌。方法
三、恢復數據
因爲hdfs存儲着每一個數據塊的備份,它能夠經過複製無缺的數據備份來修復損壞的數據塊來恢復數據。
四、Localfilesystem類
用來執行客戶端的校驗和驗證。當寫入一個名爲filename的文件時文件系統客戶端會在包含文件塊校驗和的同一目錄內創建一個名爲Filename.cc的隱藏文件。
五、Checksumfilesystem類
LocalFileSystem類經過ChecksumFileSystem類來完成本身的任務FileSystem rawFs;FileSystem checksummedFs=new ChecksumFileSystem(rawFS);能夠經過CheckFileSystem的getRawFileSystem()方法獲取源文件系統。當檢測到錯誤,CheckFileSystem類會調用reportCheckSumFailure()方法報告錯誤,而後LocalFileSystem將這個出錯的文件和校驗和移到名爲bad_files的文件夾內,管理員能夠按期檢查這個文件夾。