您的位置 首页 java

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

说道数据的完整性,之前是有火车相撞的情况,比如,如果控制高铁信号灯的,一个数据,存储该数据的磁盘如果坏了,那不严重了吗,该显示

红灯,显示成绿灯了.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

还有比如,如果你存款余额是1000,000,如果中间的小数点搞错了,那么变成1000000,那么银行不就完蛋了对吧.

HDFS 对于,数据的正确性,完整性,是有校验机制的.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

关于这个校验机制,最简单的一种是 奇偶校验 ,可以看到奇偶校验是什么意思呢?

可以看到比如我们传输数据:

0100 0001 对应的他会给数据添加一个校验位是0 这个0是怎么来的,他是查一下1的个数,可以看到左边1的个数是2,2是偶数所以 校验位就给填写了一个0 .然后把这个 0100 0001 0这个数据传输了过去.然后接收端,接收到这个数据以后,如果网络传输中,这个数据错了一位,比如0100 0011 0

过来数据变成了这样的,那么,接收端也会做一个检查,他也会去查1的个数,一查是3,这个时候,他就知道3是奇数,按说,最后以为校验位,应该填写的是1啊,怎么会是0呢?

这个时候他就知道,传过来的数据,在传输过程中,给弄错了,这个数据需要重新传输.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

但是有人就可能会说了,他这个奇偶校验有漏洞,比如0100 0001 0 传过来的结果是

0101 0011 0 这样呢,这样就检测不出来了,虽然也是错了,但是1的个数还是偶数个是4个了,

所以校验位还应该是0.这个时候接收端就认为数据是对的,其实这个时候传过来的数据已经错了

但是接收端这个时候,按照奇偶校验的方式就校验不出来了.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

但是 hadoop hdfs 工程师,也想到了这一点,他们使用 CRC 校验,就可以保证数据,传输过来的是

对的了,这个crc校验算法,这里不说,可以查一下了解一下.

可以看到,crc校验,也是有个校验位,就是判断比如

0100 1001 110的校验位是110,然后接收端,收到数据以后,0100 1001 110 他就去根据crc算法去获得0100 1001 这个数据的校验位,如果和传过来的校验位110一样,那么他就认为这个数据是没问题的.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

然后我们再去集群上去看一下这个效果.

访问hadoop102:9870/dfshealth.html#tab-overview

选择utilities 下面有个browser the file system

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

这里数据比较多,我们换一种方式看

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

我们在hadoop102中,放一个vim a.txt这个文件中,写入个abcd

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

esc 然后:wq!保存

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

然后我们把这个文件上传到hdfs文件系统中的根目录

hadoop fs -put a.txt /

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

可以看到上面的方法,testGet,这个是我们之前写的,下载文件到本地的,方法java代码

fs.copyToLocalFile(false,…..)

第一个参数是下载后,是否要把hdfs上的源文件删除,然后第二个是下载hdfs上的哪个文件,

第三个是要下载的本地的什么路径内,然后第三个是,是否开启文件正确性校验,这里我们设置成false.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

执行之前我们先去看看,d盘根目录,在我们下载之前没有这个a.txt文件

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

然后我们执行下载

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

执行以后我们看到有个a.txt文件

打开一看

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

没问题对吧,

然后那个crc文件怎么看呢

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

我们需要用 editplus 工具,把刚才那个crc文件拖进来,然后

用16 进制 打开.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

这个错误不用管,点击确定就可以了

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

可以看到上面,63 72 00 00 00 02 00 这个是传过来的,abcd内容,然后

58 8A A4 AC 是crc的校验码

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

我们去找个crc循环冗余校验的网站去看看去

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

我们输入abc,选择Ascii,然后点击计算,得到的crc的结果是

ED 82 CD 11 这个CRC校验位,跟我们那个crc文件中的

58 8A A4 AC 的crc的校验码不一样怎么回事?传的时候出错了?我们得到的数据是abcd没错啊

对吧.

这个时候我们再去看

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

可以看到这个a.txt文件中多了一个回车换行对吧.

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

我们把这个带有回车的abcd,放到需要校验的数据里面,然后点击计算

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

可以看到校验的结果,校验位算出来是

58 8A A4 AC对吧,跟我们那个crc文件中的,crc校验位一样了,也就是什么?

我们如果传输错误了数据,比如把abcd回车,传输成了abcd了,这个时候,就会导致

crc校验 位出现问题,和原来的不一样了对吧,这也就证明了crc校验是,可以保证数据的

正确性的.

只要数据跟原来的数据不一样,只要差一点,就会被crc校验,检测出来,校验位就变了.

文章来源:智云一二三科技

文章标题:大数据之-Hadoop3.x_HDFS_数据完整性_HDFS的CRC数据校验

文章地址:https://www.zhihuclub.com/198345.shtml

关于作者: 智云科技

热门文章

网站地图