是否分别在每个mapper和reducer任务中调用了setup和cleanup方法?或者他们只是在整个mapper和reducer工作开始时只调用一次?
答案 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);这样,减速器的设置和清理只运行一次。