hadoop之数据完整性与数据损坏处理
数据损坏(corruption)处理与数据完整性
由于每个DataNode操作磁盘或网络I/O操作可能会对正在读写的数据处理不慎而出现错误,hadoop提供了他的
数据检测方式:
主要在于两个方面:一是校验和的方法实现;二是DataBlockScanner数据块检测程序;
一:校验和
在系统启动时计算数据的校验和,在通道传输过程中,如果新生成的校验和不完全匹配原始的校
验和,那么数据就会被认为是被损坏的。
1:DataNode在读取Block时候计算checksum;
2:针对数据的每个io.bytes.per.checksum字节(这个字节是怎么来的?!),都会创建一个单独的校
验和。默认值为512字节;
3:如果计算后的checksum,与block创建时值不一样,说明该block已经损坏。
4:client读取其它DN上的block;NN标记该块已经损坏,然后复制block达到预期设置的文件备份数。
5:每个datanode都维护着一个连续的校验和和验证日志,里面有着每个block的最后验证的时间。
数据端成功验证block之后,便会告诉datanode,datanode随之更新日志。
二:数据块检测程序(DataBlockScanner)
每个datanode会在后台线程运行一个DataBlockScanner定期验证存储在datanode上的所有block。这是
为了防止物理存储介质出现衰减。
默认情况下DN在其文件创建后三周验证其checksum