1

Are there any particular reasons why we have only two functions map() and reduce() in this MapReduce concept of distributed processing?? Why wasn't the Hadoop framework designed to be generic, allowing the user to make as many function calls as he desires after the initial mapping function?

4

2 回答 2

2

如果您只想对给定的Map输出应用不同的Reduce操作,我只会使用写入不同的文件/目录,这将“模拟”在同一个 map 输出上具有多种类型的 reducer。你可以申请你的,更多信息可以在这里找到。MultipleOutputsMultipleOutputsReducer

拥有一个 Map 和 Reduce 函数的目标是可以很容易地在各种机器上并行化。Map/Reduce 作业是一个并行化的单个进程,IMO 尝试对同一数据应用多个操作实际上没有意义,如果您需要可以使用我上面写的内容扩展您的 Reducer,或者写另一份工作。

于 2013-02-19T07:38:51.367 回答
1

虽然 Charles 的回答解释了 MapReduce 概念背后的原因,但您可以在初始映射函数之后进行任意数量的函数调用,只需覆盖run()类的Mapper(新 API)

  @override
  public void run(Context context) throws IOException, InterruptedException {
    setup(context);
    while (context.nextKeyValue()) {
      map(context.getCurrentKey(), context.getCurrentValue(), context);
    }
    // Call all your methods you want here
    cleanup(context);
  }

你也可以在减速器中做类似的事情。

于 2013-02-19T22:28:27.943 回答