所有地图处理相同的文件?

时间:2014-05-06 21:42:36

标签: hadoop

通常Hadoop拆分文件并将每个拆分发送到每台机器,但我想让每台机器处理相同的文件(不是文件的拆分),然后将结果发送到reduce,并在reduce过程中将它们汇总所有的结果。我怎样才能做到这一点?任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:0)

好的..这可能不是确切的解决方案,但实现这一目标的一种肮脏方式是:

set FileInputFormat.setMaxInputSplitSize(job, size)其中size参数的值必须大于输入文件大小(以字节为单位),可以使用java length() 类的File方法计算。它确保每个文件只有一个映射器,并且您的fie不会被拆分。

现在为每台机器使用MultipleInputs.addInputPath(job, input_path, InputFormat.class),这些机器将在每台机器上运行单个映射器。
根据您的要求,减少功能不需要任何更改。

脏部件这里是 - MultipleInputs.addInputPath需要唯一的路径。因此,您可能必须将相同的文件复制到您想要的映射器的数量,并为它们提供唯一的名称,并将其提供给MultipleInputs.addInputPath的参数。如果您提供相同的路径,它将被忽略。

答案 1 :(得分:0)

您的问题是您遇到了多个问题。我想(你想)做什么:

  • 制作一些随机样本集
  • 总和样本

我将这些分解为两个单独的简单地图/缩小。 mapreduce用于生成随机样本。第二步分别对每个样本求和。

现在可能有一种聪明的方法可以一次完成这一切,但除非你有一些不寻常的限制,否则我会感到惊讶,如果它值得额外的复杂性。