2013-01-23 138 views
3

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

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

+0

你使用的是什么版本的hadoop?你在使用CDH发行版吗? –

回答

11

提供了用Hadoop没有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; 
3

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

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

它只是将你的本地计算机上运行。如果这太慢了,那么是的,你必须对Hive和MapReduce做些什么,但这有点棘手,并且不会与diff的按序比较完全匹配。