验证hdfs中文件的校验和

disho6za  于 2021-05-30  发布在  Hadoop
关注(0)|答案(3)|浏览(950)

我使用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上的同一个文件不同我需要比较校验和我怎么做?

jtw3ybtb

jtw3ybtb1#

一种方法是在本地计算校验和,然后在摄取它之后将它与hadoop校验和匹配。
我编写了一个库来计算它的本地校验和,以防有人感兴趣。https://github.com/srch07/hdfschecksumforlocalfile

x8diyxa7

x8diyxa72#

试试这个

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

nfeuvbwi

nfeuvbwi3#

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

$ 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

相关问题