使用hadoop mapreduce确定重复数据删除的键值对

时间:2014-03-30 05:44:00

标签: hadoop mapreduce deduplication

我想使用Hadoop Mapreduce实现文件的重复数据删除。我计划通过计算mapper函数中输入目录中存在的所有文件的MD5总和来实现。这些MD5哈希将是reducer的关键,因此具有相同哈希值的文件将转到同一个reducer。

Hadoop中映射器的默认值是键是行号,值是文件的内容。

另外我读到如果文件很大,那么它会被分成64 MB的块,这是Hadoop中的最大块大小。

如何将键值设置为文件的名称,以便在我的映射器中我可以计算文件的哈希值?另外,如何确保没有两个节点计算同一文件的哈希值?

1 个答案:

答案 0 :(得分:3)

如果您需要将整个文件作为一个映射器的输入,那么您需要保持isSplitable为false。在这种情况下,您可以将整个文件作为映射器的输入并在其上应用MD5并将其作为键发出。

WholeFileInputFormat(不是hadoop代码的一部分)可以在这里使用。您可以在线获取实现,也可以在Hadoop:The Definitive Guide一书中找到它。

值可以是文件名。在Context实例上调用getInputSplit()将为您提供输入拆分,可以将其转换为filesplits。然后fileSplit.getPath().getName()将为您提供文件名。这会给你filename,它可以作为值发出。

我没有做过这个 - org.apache.hadoop.hdfs.util.MD5FileUtils,但是javadocs说这可能对你有用。

包含WholeFileInputFormat和相关RecordReader的教科书src链接以供参考

1)WholeFileInputFormat

2)WholeFileRecordReader

还包括grepcode link到MD5FileUtils