hdfs校验和
hdfs完整性:用戶希望儲存和處理數據的時候,不會有任何損失或者損壞。所以提供了兩種校驗:
1.校驗和(常用循環冗余校驗CRC-32)。
2.運行后臺進程來檢測數據塊。
校驗和:
a.寫入數據節點驗證
b.讀取數據節點驗證
c.恢復數據
d.Localfilesystem類
e.ChecksumfileSystem類
寫入數據節點驗證:
Hdfs會對寫入的所有數據計算校驗和,并在讀取數據時驗證校驗和。
元數據節點負責在驗證收到的數據后,儲存數據及其校驗和。在收到客戶端數據或復制其他datanode的數據時執行。
正在寫數據的客戶端將數據及其校驗和發送到一系列數據節點組成的管線,管線的最后一個數據節點負責驗證校驗和。
讀取數據節點驗證:
客戶端讀取數據節點數據也會驗證校驗和,將它們與數據節點中儲存的校驗和進行比較。
每個數據節點都持久化一個用于驗證的校驗和日志。 客戶端成功驗證一個數據塊后,會告訴這個數據節點,數據節點由此更新日志。
恢復數據:
由于hdfs儲存著每個數據塊的備份,它可以通過復制完好的數據備份來修復損壞的數據塊來恢復數據。
Localfilesystem類:
Hadoop的LocalFileSystem類是用來執行客戶端的校驗和驗證。當寫入一個名為filename的文件時文件系統客戶端會在包含文件塊校驗和的同一目錄內建立一個名為Filename.crc的隱藏文件。
ChecksumfileSystem類:
LocalFileSystem類通過ChecksumFileSystem類來完成自己的任務 FileSystem rawFs;
FileSystem checksummedFs=new ChecksumFileSystem(rawFS);
可以通過CheckFileSystem的getRawFileSystem()方法獲取源文件系統。
當檢測到錯誤,CheckFileSystem類會調用reportCheckSumFailure()方法報告錯誤,然后LocalFileSystem將這個出錯的文件和校驗和移到名為bad_files的文件夾內,管理員可以定期檢查這個文件夾。
DatablockScanner:
數據節點后臺有一個進程DataBlockScanner,定期驗證儲存在這個數據節點上的所有數據項,該項措施是為解決物理儲存媒介上的損壞。DataBlockScanner是作為數據節點的一個后臺線程工作的,跟著數據節點同時啟動 它的工作流程如圖:
?
?
由于對數據節點上的每一個數據塊掃描一遍要消耗較多系統資源,因此掃描周期的值一般比較大, 這就帶來另一個問題,就是在一個掃描周期內可能出現數據節點重啟的情況,所以為了提高系統性能,避免數據節點在啟動后對還沒有過期的數據塊又掃描一遍, DataBlockScanner在其內部使用了日志記錄器來持久化保存每一個數據塊上一次掃描的時間 這樣的話,數據節點可以在啟動之后通過日志文件來恢復之前所有的數據塊的有效時間。
?
Better late than nerver.
轉載于:https://www.cnblogs.com/luminous1/p/8360980.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
- 上一篇: linux的/etc/hosts的作用
- 下一篇: hbase,根据前缀匹配进行搜索并分批次