HDFS会对写入的所有数据计算校验和,并在读取数据时验证校验和。
DataNode负责在接收到数据后存储该数据及验证校验和
恢复损坏的Block, 主要有以下几步:
1)客户端在读取Block时,如果检测到错误,首先向NameNode报告已损坏的Block及其正在尝试读操作的这个DataNode, 再抛出ChecksumException
2)NameNode将这个Block副本标记为已损坏,这样NameNode就不会把客户端指向这个Block,也不会复制这个Block到其他的DataNode
3)NameNode会把一个好的Block复制到另一个DataNode上, 如此一来,Block的副本因子又回到期望水平。
4)最后,NameNode把已损坏的Block副本删除