7

既然没有,如何比较两个 HDFS 文件diff

我正在考虑使用 Hive 表并从 HDFS 加载数据,然后在 2 个表上使用连接语句。有没有更好的方法?

4

2 回答 2

17

hadoop没有diff提供任何命令,但您实际上可以通过以下diff命令在 shell 中使用重定向:

diff <(hadoop fs -cat /path/to/file) <(hadoop fs -cat /path/to/file2)

如果您只想知道 2 个文件是否相同而不关心差异,我建议您使用另一种基于校验和的方法:您可以获取两个文件的校验和,然后进行比较。我认为 Hadoop 不需要生成校验和,因为它们已经存储,所以它应该很快,但我可能错了。我认为没有命令行选项,但您可以使用 Java API 轻松完成此操作并创建一个小应用程序:

FileSystem fs = FileSystem.get(conf);
chksum1 = fs.getFileChecksum(new Path("/path/to/file"));
chksum2 = fs.getFileChecksum(new Path("/path/to/file2"));
return chksum1 == chksum2;
于 2013-01-24T00:03:38.467 回答
4

好吧,最简单的答案可能是:

diff <(hadoop fs -cat file1) <(hadoop fs -cat file2)

它只会在您的本地机器上运行。如果这太慢了,那么是的,您必须使用 Hive 和 MapReduce 做一些事情,但这有点棘手,并且不会完全匹配 diff 所做的按顺序比较。

于 2013-01-24T00:01:56.653 回答