2014-09-11 106 views
0

我有/hadoop/hdfs/location1中的6000+ .csv文件和/hadoop/hdfs/location2中的6100+ .csv文件。2 Hdfs文件比较

我想比较这两个hdfs目录并找到文件的差异。 diff .csv文件(不相似)应该反映在第三个hdfs目录中(/hadoop/hdfs/location3)。我不确定我们可以使用diff命令,如同在unix中的hdfs文件系统一样。

关于如何解决这个问题的任何想法都是可观的。

Anshul

+0

diff命令为您提供了有序的差异,以便内容明智的,你应该要小心在文件比较中使用它。例如让文件X有三行,每行分别有A,B,C。第二个文件Y有C B A. Diff会给你说文件是不同的,但实际上从记录的角度来看内容是相同的。 – 2016-12-26 16:32:07

回答

0

你可以使用一些Python(的Perl /等)脚本来检查它。根据您的特殊需求和速度,您可以先检查文件大小。文件名是否一致?创作日期是否相同?

如果您想使用python,请查看filecmp module

>>> import filecmp 
>>> filecmp.cmp('undoc.rst', 'undoc.rst') 
True 
>>> filecmp.cmp('undoc.rst', 'index.rst') 
False 
0

我想下面的步骤将解决您的问题:

  1. 获取这是在第一个位置到一个文件的文件名列表
  2. 获取第二位置上的文件到另一个文件
  3. 使用unix命令找到两个文件之间的差异
  4. 无论您找到哪个diff文件,都要将这些文件复制到其他位置。

我希望这可以帮助你。否则让我知道。

0

看看下面的帖子里面提供了有关如何比较2个HDFS文件的答案。你将需要扩展这2个文件夹。

HDFS File Comparison

您可以轻松地使用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;