我想使用Hadoop Mapreduce实现文件的重复数据删除。我打算通过计算我的映射函数中输入目录中存在的所有文件的MD5总和来完成此操作。这些MD5哈希将成为reducer的关键,因此具有相同哈希的文件将转到同一个reducer。使用hadoop mapreduce确定重复数据删除的键值对
Hadoop中映射器的默认值是关键是行号,值是文件的内容。
另外我读到,如果文件很大,那么它将被拆分为64 MB的块,这是Hadoop中的最大块大小。
如何将键值设置为文件的名称,以便在我的映射器中可以计算文件的哈希值?另外如何确保没有两个节点将计算相同文件的哈希值?
有多大你的文件?我的意思是大小......他们是文本文件吗? –
它们是文本文件,可能在几KB到几百MB之间。 – ManTor
WholeFileInputFormat(不是hadoop代码的一部分)可以在这里使用。您可以在线获取实施或在Hadoop:权威指南手册中获得实施。这将使整个文件映射为值。对这个值做MD5并作为关键字发出。 值可以是文件名。在Context实例上调用getInputSplit()会为您提供可以作为文件分割转换的输入分割。然后fileSplit.getPath()。getName()会产生你的文件名。这会给你文件名,可以作为值发出。 –