我有一个问题。是否有可能将mapreduce程序的输入划分为多个map函数的处理?我的意思是我们可以为每个地图功能分配一个特定的输入范围吗?
答案 0 :(得分:1)
最简单的方法是使用MultipleInputs
。特别是,使用具有参数的addInputPath
函数传递映射器类。
以下是一个例子:
MultipleInputs.addInputPath(thejob, new Path(path1), TextInputFormat.class, Mapper1.class);
MultipleInputs.addInputPath(thejob, new Path(path2), TextInputFormat.class, Mapper2.class);
...
MultipleInputs.addInputPath(thejob, new Path(pathN), TextInputFormat.class, MapperN.class);
这将使Mapper1
针对path1
运行,Mapper2
针对path2
等运行。
请注意,此处的限制是您需要通过文件来完成输入分区...而不是输入分割或类似的东西。最简单的方法是为每个映射器提供一个数据文件夹。