每个 mapper 和 reducer 任务中是否分别调用了 setup 和 cleanup 方法?还是在整个映射器和减速器作业开始时只调用一次?
问问题
32436 次
5 回答
25
每个任务都会调用它们,因此如果您有 20 个映射器正在运行,则将为每个任务调用 setup/cleanup。
一个问题是 Mapper 和 Reducer 的标准 run 方法不会捕获 map / reduce 方法周围的异常 - 因此,如果在这些方法中抛出异常,则不会调用 clean up 方法。
2020 年编辑:如评论中所述,2012 年(Hadoop 0.20)的此声明不再正确,清理被称为 finally 块的一部分。
于 2012-06-05T01:01:29.580 回答
5
一个澄清是有帮助的。setup/cleanup 方法用于在任务级别进行初始化和清理。在一个任务中,首先通过调用 setup() 方法进行初始化,然后对 map() [或 reduce()] 函数的所有调用都将完成。之后,将在退出任务之前对 cleanup() 方法进行另一次调用。
于 2014-01-06T01:39:43.683 回答
4
它被每个 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);
}
}
于 2014-02-15T14:59:12.953 回答
2
根据mapreduce 文档 ,每个 Mapper 和 Reducer 任务都会调用 setup 和 cleanup。
于 2015-03-19T07:47:32.867 回答
1
在减速器上,您可以在工作中执行 job.setNumReduceTasks(1); 这样减速器的设置和清理将只运行一次。
于 2015-09-21T23:22:30.957 回答