Hadoop中的校验和验证
在通过Webhdfs将文件从Linux服务器移动到Hadoop(HDFS)之后,我们需要验证校验和吗 我想确保HDFS上的文件在复制后没有损坏。但是检查校验和是必要的吗 在将数据写入HDFS之前,我读取客户机进行校验和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
有人能帮助我了解如何确保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