2015-11-23 45 views
1

Hadoop MapReduce中的合并器逻辑是否与Reducer逻辑相同?或者是否有组合逻辑可能与Reducer逻辑不同的情况?组合器逻辑是否总是与减速器逻辑相同?

+1

的可能的复制[组合器和减速器可以是不同的?](http://stackoverflow.com /问题/ 11731770 /组合器和减速器-可待不同) –

回答

-1

在大多数情况下,组合器逻辑与减速器逻辑相同。虽然我们可能有与reducer不同的组合器逻辑。

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

合并器将结合每个地图输出的结果。由于这个原因,一些值在映射阶段本身被合并,并且由于较少的值需要从映射器遍历到还原器,因此网络流量急剧减少。

0

不可以。您可以指定所需的任何组合器功能。我建议你在行动书中阅读Mahout,在第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.setCombinerClass(MaxTemperatureReducer.class); 所以你可以指定你想要的任何组合器功能。通常组合器和减速器具有相同的逻辑,但并非总是如此。

1
  1. 合成器类&减速器类可能会也可能不会相同,这取决于您的要求。
  2. 但两者合&减速器具有通过延伸Reducer

    例如实现降低()方法

    public void reduce(Key key, Iterable<IntWritable> values, 
           Context context) throws IOException, InterruptedException { 
    
  3. 如果两个组合器&减速器是不同的,设置这些类如下面

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