如何比较两个HDFS文件,因为没有diff
?
我正在考虑使用Hive表并从HDFS加载数据,然后在2个表上使用join语句。有没有更好的方法?
答案 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做一些事情,但这有点棘手,并且不会完全匹配差异所做的有序比较。