我是靠谱客的博主 大方猫咪,最近开发中收集的这篇文章主要介绍HDFS之数据完整性校验,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

写在前面,学习自: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之数据完整性校验所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(61)

评论列表共有 0 条评论

立即
投稿
返回
顶部