Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop MapReduce中Mapper/Reducer的设置和清理方法_Hadoop_Mapreduce - Fatal编程技术网

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

Hadoop MapReduce中Mapper/Reducer的设置和清理方法,hadoop,mapreduce,Hadoop,Mapreduce,是否分别在每个映射器和reducer任务中调用setup和cleanup方法?或者,它们只在整体映射器和还原器作业开始时调用一次 每个任务都会调用它们,因此如果您有20个映射器正在运行,则会为每个任务调用设置/清理 一个问题是Mapper和Reducer的标准运行方法都不能捕获map/reduce方法周围的异常,因此如果在这些方法中抛出异常,则不会调用clean-up方法 2020编辑:如评论中所述,2012年的这句话(Hadoop 0.20)不再正确,清理被称为finally块的一部分。一个澄

是否分别在每个映射器和reducer任务中调用setup和cleanup方法?或者,它们只在整体映射器和还原器作业开始时调用一次

每个任务都会调用它们,因此如果您有20个映射器正在运行,则会为每个任务调用设置/清理

一个问题是Mapper和Reducer的标准运行方法都不能捕获map/reduce方法周围的异常,因此如果在这些方法中抛出异常,则不会调用clean-up方法


2020编辑:如评论中所述,2012年的这句话(Hadoop 0.20)不再正确,清理被称为finally块的一部分。

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

它被称为per-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);
    }
  }
根据
为每个映射器和Reducer任务调用设置和清理。

在Reducer上,您可以在作业中执行作业。setNumReduceTasks(1);这样,reducer的设置和清理只会运行一次。

可以在map/reduce中异常的catch子句中调用cleanup方法。但是,这需要对可能的异常进行智能分析,并放入
try/catch
子句来捕获它们。
One gotcha是Mapper和Reducer的标准运行方法,它不会捕获map/reduce方法周围的异常。默认的run()实现将map()和reduce()方法包装在try/finally中@NickODell-感谢更新,以后可以自由编辑答案