HDFS如何保证数据的完整性呢?
HDFS如何保证数据的完整性呢?
1、客户端向HDFS写数据的时候
1、假设客户端发送2KB的数据
2、客户端会以字节的方式往datanode发送,所以客户端会计算发送的数据有多少个,而这个单位就是chunk,它一般情况是512字节,也就是说,每512字节就称为一个chunk。
3、客户端可以计算出checksum值,checksum = 2KB/512B=4
4、然后datanode接收客户端发送来的数据,每接收512B的数据,就让checksum的值+1
5、最后比较客户端和datanade的checksum值
注意:客户端读取数据也是同样的道理
2、DataNode读取block块的时候
1、block创建的时候会有一个初始的checksum值
2、DataNode每隔一段时间就会计算block新的checksum值,看block块是否已经丢失
3、如果checksum和之前一样,则没丢失,和之前比出现了不一样,那就说明数据丢失(或者异常)
4、当发生异常的时候,DateNode会报告给NameNode,NameNode会发送一条命令,清除这个异常块,然后找到这个块对应的副本,将完整的副本复制给其他的DataNode节点