HDFS文件比较

时间:2013-01-23 20:29:11

标签: hadoop hive hdfs

如何比较两个HDFS文件,因为没有diff

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

2 个答案:

答案 0 :(得分:16)

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;

答案 1 :(得分:3)

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

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

它将在您的本地计算机上运行。如果那个太慢,那么是的,你必须对Hive和MapReduce做一些事情,但这有点棘手,并且不会完全匹配差异所做的有序比较。