Hadoop MapReduce中Mapper / Reducer的设置和清理方法

时间:2012-06-04 22:15:12

标签: hadoop mapreduce

是否分别在每个mapper和reducer任务中调用了setup和cleanup方法?或者他们只是在整个mapper和reducer工作开始时只调用一次?

5 个答案:

答案 0 :(得分:21)

为每个任务调用它们,因此如果你有20个映射器运行,将为每个任务调用setup / cleanup。

一个问题是Mapper和Reducer的标准运行方法没有捕获map / reduce方法的异常 - 所以如果在这些方法中抛出异常,则不会调用清理方法。

答案 1 :(得分:5)

一个澄清是有帮助的。 setup / cleanup方法用于初始化和在任务级别清理。在任务中,首先通过调用setup()方法进行初始化,然后完成对map()[或reduce()]函数的所有调用。之后,在退出任务之前,将对cleanup()方法进行另一次单独调用。

答案 2 :(得分:3)

根据Mapper任务或Reducer任务调用它。 这是hadoop代码。

public void run(Context context) throws IOException, InterruptedException {
    setup(context);
    try {
      while (context.nextKey()) {
        reduce(context.getCurrentKey(), context.getValues(), context);
      }
    } finally {
      cleanup(context);
    }
  }

答案 3 :(得分:1)

根据mapreduce documentation 为每个Mapper和Reducer任务调用setup和cleanup。

答案 4 :(得分:1)

在减速机上你可以在工作上做job.setNumReduceTasks(1);这样,减速器的设置和清理只运行一次。