Hadoop中的校验和验证

Hadoop中的校验和验证,hadoop,hdfs,checksum,Hadoop,Hdfs,Checksum,在通过Webhdfs将文件从Linux服务器移动到Hadoop(HDFS)之后,我们需要验证校验和吗 我想确保HDFS上的文件在复制后没有损坏。但是检查校验和是必要的吗 在将数据写入HDFS之前,我读取客户机进行校验和 有人能帮助我了解如何确保Linux系统上的源文件与使用webhdfs的Hdfs上摄取的文件相同。可以使用hadoop fs命令计算文件的校验和 用法:hadoop fs-校验和URI 返回文件的校验和信息 例如: hadoop fs-校验和hdfs://nn1.example.c

在通过Webhdfs将文件从Linux服务器移动到Hadoop(HDFS)之后,我们需要验证校验和吗

我想确保HDFS上的文件在复制后没有损坏。但是检查校验和是必要的吗

在将数据写入HDFS之前,我读取客户机进行校验和


有人能帮助我了解如何确保Linux系统上的源文件与使用webhdfs的Hdfs上摄取的文件相同。

可以使用hadoop fs命令计算文件的校验和

用法:hadoop fs-校验和URI

返回文件的校验和信息

例如:

hadoop fs-校验和hdfs://nn1.example.com/file1 hadoop fs-校验和file:///path/in/linux/file1

有关更多详细信息,请参阅


因此,如果您想在linux和hdfs中同时使用file1,可以使用上述实用程序。

它进行crc检查。它为每个文件创建.crc以确保没有损坏。

我编写了一个库,您可以使用它计算本地文件的校验和,就像hadoop在hdfs文件上所做的那样

因此,您可以将校验和与交叉校验进行比较。

如果您的目标是比较驻留在HDFS上的两个文件,我不会使用“HDFS dfs-校验和URI”,因为在我的示例中,它会为具有相同内容的文件生成不同的校验和

在下面的示例中,我比较了两个在不同位置具有相同内容的文件:

老式md5sum方法返回相同的校验和:

$ hdfs dfs -cat /project1/file.txt | md5sum
b9fdea463b1ce46fabc2958fc5f7644a  -

$ hdfs dfs -cat /project2/file.txt | md5sum
b9fdea463b1ce46fabc2958fc5f7644a  -
但是,对于具有相同内容的文件,HDFS上生成的校验和是不同的:

$ hdfs dfs -checksum /project1/file.txt
0000020000000000000000003e50be59553b2ddaf401c575f8df6914

$ hdfs dfs -checksum /project2/file.txt
0000020000000000000000001952d653ccba138f0c4cd4209fbf8e2e

有点令人费解,因为我希望针对相同的内容生成相同的校验和

如果您通过API执行此检查

import org.apache.hadoop.fs._
import org.apache.hadoop.io._
选项1:对于值
b9fdea463b1ce46fabc2958fc5f7644a

val md5:String = MD5Hash.digest(FileSystem.get(hadoopConfiguration).open(new Path("/project1/file.txt"))).toString
选项2:对于值
3e50be59553b2ddaf401c575f8df6914

val md5:String = FileSystem.get(hadoopConfiguration).getFileChecksum(new Path("/project1/file.txt"))).toString.split(":")(0)

linux box和hdfs上的文件校验和不同
hadoop fs-checksumfile:///path/in/linux/file1
对我不起作用,它返回
NONE
。你知道为什么吗?你的路线是正确的吗file:///path/in/linux/file1“hdfs路径”选项2只做了一次修改就对我有效。整个字符串类似于“MD5-of-0MD5-of-512CRC32C:2945923ab454345cd9073a”,因此为了获得它的哈希部分,我必须使用.toString.split(:)而不是.toString.split(:)(0)Hadoop配置是什么?来自HDFS的校验和来自文件系统的底层数据;如果您有不同的块大小、加密、擦除编码等,这些将是不同的。校验和不是动态计算的。如果
md5sum
不可用,可以尝试
cksum