3

我正在使用 webhdfs 将数据从本地文件系统摄取到 HDFS。现在我想确保摄取到 HDFS 中的文件的完整性。

如何确保传输的文件没有损坏/更改等?

我使用下面的 webhdfs 命令来获取文件的校验和

curl -i -L --negotiate -u: -X GET "http://$hostname:$port/webhdfs/v1/user/path?op=GETFILECHECKSUM"

我应该如何使用上述校验和来确保摄取文件的完整性?请建议

以下是我正在遵循的步骤

>md5sum locale_file
740c461879b484f4f5960aa4f67a145b

 >hadoop fs -checksum locale_file
locale_file     MD5-of-0MD5-of-512CRC32C        000002000000000000000000f4ec0c298cd6196ffdd8148ae536c9fe

本地系统上文件的校验和与 HDFS 上的相同文件不同我需要比较校验和我该怎么做?

4

3 回答 3

3

一种方法是在本地计算校验和,然后在摄取后将其与 hadoop 校验和进行匹配。

我写了一个库来为它在本地计算校验和,以防任何人感兴趣。 https://github.com/srch07/HDFSChecksumForLocalfile

于 2016-11-09T09:14:47.467 回答
2

尝试这个

curl -i "http://<HOST>:<PORT>/webhdfs/v1/<PATH>?op=GETFILECHECKSUM"

请参阅以下链接以获取完整信息

https://hadoop.apache.org/docs/r2.6.0/hadoop-project-dist/hadoop-hdfs/WebHDFS.html#Get_File_Checksum

于 2015-06-29T14:29:37.003 回答
1

可以从控制台完成,如下所示

$ md5sum locale_file
740c461879b484f4f5960aa4f67a145b

$ hadoop fs -cat locale_file |md5sum -
740c461879b484f4f5960aa4f67a145b -

您还可以通过代码验证本地文件

import java.io._
import org.apache.commons.codec.digest.DigestUtils;

val md5sum = DigestUtils.md5Hex("locale_file")

对于 Hadoop

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

val md5sum = MD5Hash.digest(FileSystem.get(hadoopConfiguration).open(new Path("locale_file"))).toString
于 2017-11-15T07:35:47.110 回答