既然没有hdfs文件,我如何比较两个hdfs文件 diff ?我在考虑使用配置单元表,从hdfs加载数据,然后在两个表上使用join语句。有没有更好的办法?
diff
qvtsj1bj1#
最简单的答案可能是:
diff <(hadoop fs -cat file1) <(hadoop fs -cat file2)
它只会在你的本地机器上运行。如果这太慢了,那么是的,您必须使用hive和mapreduce做一些事情,但是这有点棘手,并且不能完全匹配diff所做的顺序比较。
g52tjvyc2#
根本没有 diff 命令,但实际上可以在shell中使用 diff 命令:
diff <(hadoop fs -cat /path/to/file) <(hadoop fs -cat /path/to/file2)
如果您只想知道两个文件是否相同,而不想知道它们之间的区别,我建议使用另一种基于校验和的方法:您可以得到两个文件的校验和,然后比较它们。我认为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;
2条答案
按热度按时间qvtsj1bj1#
最简单的答案可能是:
它只会在你的本地机器上运行。如果这太慢了,那么是的,您必须使用hive和mapreduce做一些事情,但是这有点棘手,并且不能完全匹配diff所做的顺序比较。
g52tjvyc2#
根本没有
diff
命令,但实际上可以在shell中使用diff
命令:如果您只想知道两个文件是否相同,而不想知道它们之间的区别,我建议使用另一种基于校验和的方法:您可以得到两个文件的校验和,然后比较它们。我认为hadoop不需要生成校验和,因为它们已经被存储了,所以应该很快,但我可能错了。我不认为有命令行选项,但您可以通过java api轻松实现这一点,并创建一个小应用程序: