hadoopmapreduce中的组合器逻辑是否总是与reducer逻辑相同?或者有没有合并器逻辑与还原器逻辑不同的场景?
vcirk6k61#
合路器等级和减速器等级可能相同,也可能不同,这取决于您的要求。但是combiner和reducer都必须通过扩展 Reducer 例如
Reducer
public void reduce(Key key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
如果合并器和减速机都不同,则按如下所示设置这些类
job.setCombinerClass(YourCombiner.class); job.setReducerClass(YourReducer.class);
nzk0hqpo2#
在大多数情况下,组合器逻辑与归约器逻辑相同。虽然我们可能有组合逻辑不同于减速机太。合路器必须具有与减速器相同的输入类型。合并器将合并每个Map输出的结果。由于这一点,一些值在Map器阶段本身被合并,并且由于这一点,网络流量大大减少,因为从Map器到还原器所需的值更少。
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);所以你可以指定任何你想要的组合器函数。合路器和减速机通常有相同的逻辑,但并不总是这样。
3条答案
按热度按时间vcirk6k61#
合路器等级和减速器等级可能相同,也可能不同,这取决于您的要求。
但是combiner和reducer都必须通过扩展
Reducer
例如如果合并器和减速机都不同,则按如下所示设置这些类
nzk0hqpo2#
在大多数情况下,组合器逻辑与归约器逻辑相同。虽然我们可能有组合逻辑不同于减速机太。
合路器必须具有与减速器相同的输入类型。
合并器将合并每个Map输出的结果。由于这一点,一些值在Map器阶段本身被合并,并且由于这一点,网络流量大大减少,因为从Map器到还原器所需的值更少。
y53ybaqx3#
不可以。您可以指定所需的组合器函数。我建议你去读一本关于行动的书,在第32页你可以找到一些关于这个的信息。例子:
注意,调用conf.setcombinerclass(maxtemperaturereducer.class);所以你可以指定任何你想要的组合器函数。合路器和减速机通常有相同的逻辑,但并不总是这样。