hadoop中的hdfs校验和验证

r1zk6ea1  于 2021-06-02  发布在  Hadoop
关注(0)|答案(5)|浏览(854)

在通过webhdfs将文件从linux服务器移动到hadoop(hdfs)之后,是否需要验证校验和?
我想确保hdfs上的文件在复制后没有损坏。但是检查校验和是必要的吗?
我读到客户端在数据写入hdfs之前做校验和
有人能帮助我理解如何确保linux系统上的源文件与使用webhdfs的hdfs上的摄取文件相同吗。

gzszwxb4

gzszwxb41#

它做crc校验。它为每个文件创建.crc以确保没有损坏。

lc8prwob

lc8prwob2#

如果您的目标是比较驻留在hdfs上的两个文件,那么我不会使用“hdfs-dfs-checksum 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

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

h9a6wy2h

h9a6wy2h3#

我写了一个库,你可以用它来计算本地文件的校验和,就像hadoop在hdfs文件上做的那样。
因此,您可以将校验和与交叉校验进行比较。https://github.com/srch07/hdfschecksumforlocalfile

vhipe2zx

vhipe2zx4#

如果您通过api执行此检查

import org.apache.hadoop.fs._
import org.apache.hadoop.io._

选项1:对于值 b9fdea463b1ce46f2958fc5f7644a ```
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)
xe55xuns

xe55xuns5#

可以使用hadoop fs命令计算文件的校验和。
用法:hadoop fs-checksum uri
返回文件的校验和信息。
例子:
hadoop fs-校验和hdfs://nn1.example.com/file1 hadoop fs-校验和文件:///path/in/linux/file1
有关更多详细信息,请参阅:hadoop文档
因此,如果您想在linux和hdfs中同时使用file1,可以使用上面的实用程序。

相关问题