为什么只在MapReduce中映射和减少函数

时间:2013-02-19 06:50:57

标签: hadoop mapreduce hdfs distributed-computing

为什么我们在MapReduce分布式处理概念中只有两个函数map()reduce()?为什么Hadoop框架不是通用的,允许用户在初始映射函数之后进行尽可能多的函数调用?

2 个答案:

答案 0 :(得分:2)

如果您只想对给定的 Map 输出应用不同的 Reduce 操作,我只需使用MultipleOutputs写入不同的文件/目录,将在同一地图输出上“模拟”具有多种类型的减速器。您可以在MultipleOutputs中应用Reducer,可以找到更多信息here

具有单个Map和Reduce功能的目标是可以在各种机器上轻松实现并行化。 Map / Reduce作业是一个并行化的过程,IMO尝试对同一数据应用多个操作并不是真的有意义,如果你需要你可以用我上面写的扩展你的Reducer,或者写另一份工作。

答案 1 :(得分: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);
  }

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