Combinater逻辑是否始终与Reducer逻辑相同



Hadoop MapReduce中的Combiner逻辑是否始终与Reducer逻辑相同?或者是否存在组合器逻辑与还原器逻辑不同的情况?

  1. 组合器类&减速器类别可能相同,也可能不同,具体取决于您的要求
  2. 但Combinater&Reducer必须通过扩展Reducer 来实现reduce()方法

    例如

    public void reduce(Key key, Iterable<IntWritable> values,
                  Context context) throws IOException, InterruptedException {
    
  3. 如果Combinater&减速器不同,将这些级别设置为以下

     job.setCombinerClass(YourCombiner.class);
     job.setReducerClass(YourReducer.class);
    

否。您可以指定所需的组合器功能。我建议你读一本行动手册,在第32页你可以找到一些关于这方面的信息。示例:

public class MaxTemperatureWithCombiner {
public static void main(String[] args) throws IOException {
if (args.length != 2) {
System.err.println("Usage: MaxTemperatureWithCombiner <input path> " +
"<output path>");
System.exit(-1);
}
JobConf conf = new JobConf(MaxTemperatureWithCombiner.class);
conf.setJobName("Max temperature");
FileInputFormat.addInputPath(conf, new Path(args[0]));
FileOutputFormat.setOutputPath(conf, new Path(args[1]));
conf.setMapperClass(MaxTemperatureMapper.class);
conf.setCombinerClass(MaxTemperatureReducer.class);
conf.setReducerClass(MaxTemperatureReducer.class);
conf.setOutputKeyClass(Text.class);
conf.setOutputValueClass(IntWritable.class);
JobClient.runJob(conf);
}
}

请注意,您调用了conf.setCombinaterClass(MaxTemperatureReducer.class);因此,您可以指定所需的任何组合器函数。组合器和归约器通常具有相同的逻辑,但并不总是如此。

在大多数情况下,组合器逻辑与归约器逻辑相同。尽管我们可能也有不同于reducer的组合器逻辑。

组合器的输入类型必须与减速器相同。

组合器将对每个映射输出的结果进行组合。由于这一点,一些值在映射器阶段本身被组合,并且由于这一原因,网络流量显著减少,因为从映射器到减少器需要遍历的值更少。

最新更新