概述
写在前面,学习自:http://m.blog.csdn.net/Veechange/article/details/50776313,感谢博主分享。
什么是数据完整性?
什么是数据完整性?
HDFS的数据完整性,包括两个方面:一是,数据传输过程中的完整性,也就是读写数据的完整性;二是,数据存储的完整性。
为什么要完整性校验?
不希望在存储和处理数据时丢失和损坏数据。受网络不稳定、硬件损坏等因素,在数据传输和数据存储上,难免会出现数据丢失或脏数据,数据传输的量越大,出现错误的概率就越高。
怎么检校数据的完整性?
(1)校验和
(2)数据块检测程序DataBlockScanner
(1)校验和
校验和的原理是什么?
Hadoop在写入数据到HDFS上时,会为每一个固定长度(默认是512字节)的数据执行一次“校验和”,“校验和”的值和数据一起保存起来。就是说一份数据假如5000字节,他会给512字节计算一个校验码,得到5000/512个校验码。
怎么校验?
校验错误最常用得办法就是DataNode在存储客户端上传的数据之前
计算一个校验和,客户端从DataNode读取数据时也会
计算一个校验和,两个校验和如果不相同就说明数据存在错误,比较常用得错误校验码是CRC32.
例如:python中实现了crc32检验的方法。
import binascii
binascii.crc32("八斗")
-264762083
binascii.crc32("八")
1469635895
显然“八”和“八斗”的校验码是不同的。
(2)数据块检测程序DataBlockScanner
DataNode运行着一个后台进程(DataBlockScanner),定期对存储在其上面的block进行检测“检验和”,然后将检测结果向NameNode报告。
主要是防止物理存储发生改变。
如果数据block发生了变化,该如何处理呢?????
Hadoop处理损坏数据的机制:
1)、客户端在发现坏数据后,会把坏的block和block所在的datanode报告给namenode;
2)、NameNode会把这个block标记为“已损坏”,标记为“已损坏”namenode就不会为客户端指向这个block,也不会用这个block去复制到其他datanode;
3)、NameNode会把一个好的block复制到另一个datanode上;
4)、NameNode删除掉坏的block。
最后
以上就是大方猫咪为你收集整理的HDFS之数据完整性校验的全部内容,希望文章能够帮你解决HDFS之数据完整性校验所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复