合并器逻辑是否总是与还原器逻辑相同?

fumotvh3  于 2021-06-02  发布在  Hadoop
关注(0)|答案(3)|浏览(287)

hadoopmapreduce中的组合器逻辑是否总是与reducer逻辑相同?或者有没有合并器逻辑与还原器逻辑不同的场景?

vcirk6k6

vcirk6k61#

合路器等级和减速器等级可能相同,也可能不同,这取决于您的要求。
但是combiner和reducer都必须通过扩展 Reducer 例如

public void reduce(Key key, Iterable<IntWritable> values,
              Context context) throws IOException, InterruptedException {

如果合并器和减速机都不同,则按如下所示设置这些类

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

nzk0hqpo2#

在大多数情况下,组合器逻辑与归约器逻辑相同。虽然我们可能有组合逻辑不同于减速机太。
合路器必须具有与减速器相同的输入类型。
合并器将合并每个Map输出的结果。由于这一点,一些值在Map器阶段本身被合并,并且由于这一点,网络流量大大减少,因为从Map器到还原器所需的值更少。

y53ybaqx

y53ybaqx3#

不可以。您可以指定所需的组合器函数。我建议你去读一本关于行动的书,在第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);所以你可以指定任何你想要的组合器函数。合路器和减速机通常有相同的逻辑,但并不总是这样。

相关问题