将HDFS校验和与本地文件系统校验和进行比较

7

我试图编写一个简单的脚本来验证HDFS和本地文件系统的校验和。

在HDFS上,我得到了 -

[m@x01tbipapp3a ~]$ hadoop fs -checksum /user/m/file.txt
/user/m/file.txt  MD5-of-0MD5-of-512CRC32C        **000002000000000000000000755ca25bd89d1a2d64990a68dedb5514**

在本地文件系统中,我得到了 -
[m@x01tbipapp3a ~]$ cksum file.txt
**3802590149 26276247** file.txt
[m@x01tbipapp3a ~]$ md5sum file.txt
**c1aae0db584d72402d5bcf5cbc29134c**  file.txt

现在该如何进行比较呢?我尝试将HDFS校验和从十六进制转换为十进制,以查看它是否与chksum匹配,但它并没有...

有没有一种算法可以比较这两个校验和呢?

谢谢


1
我也在做同样的事情...你找到解决方案了吗? - Chhaya Vishwakarma
不行。下面的解决方案是将文件取回并进行比较,对于大文件来说并不实用。目前为止我认为还没有任何解决方案。我希望HDFS Put在某个地方进行了这个检查。 - myloginid
你找到任何文件表明目前这是不可能的了吗? - Chhaya Vishwakarma
我尝试了这里的答案:https://dev59.com/AlwZ5IYBdhLWcg3wC8j4#31921022,但对我没有用。请问有什么想法吗? - Chananel P
我发现这个问题有一个补丁:https://issues.apache.org/jira/browse/HADOOP-12326 - Chananel P
5个回答

2
从Hadoop 3.1开始,HDFS可以执行校验和。然而,比较取决于您首次将文件put到HDFS的方式。默认情况下,HDFS使用CRC32C,它计算单个块的所有MD5校验和的MD5。

这意味着您无法轻松地将该校验和与本地副本之一进行比较。您可以最初使用CRC32校验和编写文件:

hdfs dfs -Ddfs.checksum.type=CRC32 -put myFile /tmp

然后,获取校验和:

hdfs dfs -Ddfs.checksum.combine.mode=COMPOSITE_CRC -checksum /tmp/myFile

对于本地副本:

crc32 myFile

如果您没有使用CRC32校验和上传文件,或者不想再次使用CRC32校验和上传文件,您也可以只上传要与CRC32C校验和进行比较的本地副本:

hdfs dfs -put myFile /tmp

并使用以下命令在HDFS上比较两个文件:

"hdfs dfs -checksum /tmp/myFile" 和 "hdfs dfs -checksum /tmp/myOtherFile"。
参考资料:

我认为这应该是一个被选中的答案。因为校验和在不同平台上是不同的,所以我们需要使用标准方式。 - JUNPA

1

这不是一个解决方案,而是一个可用的解决方法。 本地文件校验和: cksum test.txt

HDFS 校验和: cksum hadoop fs -cat /user/test/test.txt > tmp.txt tmp.txt

您可以对它们进行比较。

希望能够帮助到您。



1
将cat'd的hdfs文件结果传输到md5sum对我有用:
$ hadoop fs -cat /path/to/hdfs/file.dat|md5sum
cb131cdba628676ce6942ee7dbeb9c0f  -

$ md5sum /path/to/localFilesystem/file.txt
cb131cdba628676ce6942ee7dbeb9c0f  /path/to/localFilesystem/file.txt

这并不适合大型文件。


0

我使用了一个解决方法,创建了一个简单的脚本来比较本地和HDFS文件系统的校验和,使用md5sum。我已经将我的HDFS文件系统挂载为本地/hdfs。

md5sum /hdfs/md5test/* | awk {'print $1'} > hdfsfile.txt
md5sum /test/* | awk {'print $1'} > localfile.txt
if ! diff /root/localfile.txt /root/hdfsfile.txt > /dev/null 2>&1;
then
/bin/mail -s "checksum difference between local and hdfs files" user@xyz.com < /dev/null
fi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接