提出问题
hadoop中的数据,可能会保存很久,保存一个月,一年,十年等。
数据保存这么久,物理存储介质由于中位衰减,会造成数据损坏,这对一个大文件来说,很容易导致一个块由于时间关系,硬盘错位,最终导致整个文件都是错误的
如果 DataNode 节点上的数据损坏了,但没有发现,继续读取,会造成严重错误,导致巨大损失
解决
Hadoop系统为了保证 数据的一致性,会对文件生成相应的校验文件(.crc文件),并在读写的时候进行校验,确保数据的准确性。
hadoop使用 crc
算法
原理
- HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和
- datanode负责在收到数据后储存该数据及其验证校验和
- 客户端从datanode读取数据时也会验证校验和,与datanode中存储的校验和进行比较
- 每个datanode均持久保存一个用于验证的校验和日志
- 每个datanode也会在一个后台线程中运行一个DataBlockScanner,定期验证存储在这个datanode上的所有数据块
常见案例:同 api 下载的文件,同时会有 crc
文件,也就是校验和文件
CRC介绍
参考
https://www.cnblogs.com/bovenson/p/5730773.html
https://blog.csdn.net/tianyeshiye/article/details/85293295