【问题标题】:HDFS File ComparisonHDFS 文件比较
【发布时间】:2017-09-26 15:23:41
【问题描述】:

由于没有diff,我如何比较两个 HDFS 文件?

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

【问题讨论】:

  • 你用的是什么版本的hadoop?您使用的是 CDH 发行版吗?

标签: hadoop hive hdfs


【解决方案1】:

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;

【讨论】:

  • 我想比较两个hdfs目录,一个有压缩数据(4个文件),另一个有50个文件未压缩,如何比较目录...
  • 即使是同一个文件,如果块大小不同,校验和也可能不同。
【解决方案2】:

嗯,最简单的答案可能是:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-11-16
    • 2021-02-16
    • 2021-11-17
    • 2017-06-10
    相关资源
    最近更新 更多