数据损坏(corruption)处理与数据完整性
一:校验和
在系统启动时计算数据的校验和,在通道传输过程中,如果新生成的校验和不完全匹配原始的校
验和,那么数据就会被认为是被损坏的。
1:DataNode在读取Block时候计算checksum;
2:针对数据的每个io.bytes.per.checksum字节(这个字节是怎么来的?!),都会创建一个单独的校
验和。默认值为512字节;
3:如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
4:client读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数。
二:数据块检测程序(DataBlockScanner)
每个datanode会在后台线程运行一个DataBlockScanner定期验证存储在datanode上的所有block。这是
为了防止物理存储介质出现衰减。
默认情况下DN在其文件创建后三周验证其checksum