Hadoop中的校验和验证

时间:2015-08-10 12:48:37

标签: hadoop hdfs checksum

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

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

我读取客户端在将数据写入HDFS之前执行校验和

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

5 个答案:

答案 0 :(得分:8)

如果您的目标是比较驻留在HDFS上的两个文件,我不会使用“hdfs dfs -checksum URI”,因为在我的情况下,它会为内容相同的文件生成不同的校验和。

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

Old-school 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

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

答案 1 :(得分:7)

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

用法:hadoop fs -checksum URI

返回文件的校验和信息。

示例:

hadoop fs -checksum hdfs://nn1.example.com/file1 hadoop fs -checksum file:/// path / in / linux / file1

请参阅:Hadoop documentation了解更多详情

因此,如果你想在linux和hdfs中使用comapre file1,你可以使用上面的实用程序。

答案 2 :(得分:5)

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

因此,您可以将校验和与交叉检查进行比较。 https://github.com/srch07/HDFSChecksumForLocalfile

答案 3 :(得分:1)

如果您通过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)

答案 4 :(得分:0)

它确实crc检查。对于每个文件,它创建.crc以确保没有损坏。