只有一个映射器的组合器,在hadoop中有两个映射器的情况下

时间:2012-07-14 19:46:13

标签: hadoop mapreduce combiners

我有两个mapper类,它们处理不同的输入,但是它们的输出将采用相同的格式并将转到同一个reducer。是否可以只为两个映射器类中的一个实现组合器?

3 个答案:

答案 0 :(得分:1)

使用组合器,如果您将Hadoop MR设置为使用它,它将处理来自所有映射器的输出。您无法指定特定的映射器。

也许考虑以下两个选项:

  1. 将合并器应用于所有输出 - 将映射器的输出映射到通用类型,以便它们可以由Reducers处理(连接?)。考虑一下,无论数据来自哪个映射器,组合都能正常工作。对这个想法的修改是在键中设置一个类型变量或从映射器输出的值,并在组合中使用它来决定天气做任何事情。

  2. 使用Map本地组合 - 如果您知道其中一个映射器的输出结合良好,您可以在映射器本身内进行一些聚合/组合,并且只定期写入输出。为了使其运作良好,您需要对工作中的输入数据有一些了解。

答案 1 :(得分:0)

查询有点不清楚。我假设您要求重用相同的组合器来组合两个不同映射器的输出。应该可以,因为两个映射器的输出是相同的。

可以使用MultipleInputs类在单个作业中使用两个映射器,也可以在两个不同的作业中使用。在任何情况下,必须按工作指定组合器。

另外,请注意

1)映射器的o / p应与reducer的i / p匹配。

2)映射器的o / p应与组合器的i / p匹配。

3)组合器的i / p和o / p应该是相同的类型。

答案 2 :(得分:0)

适用于最后一个链式映射器的组合器,附带示例代码

ChainMapper.addMapper(job, SalesRecordMapper.class, LongWritable.class, Text.class, Text.class, DoubleWritable.class, configuration);

ChainMapper.addMapper(job, ItemDiscountMapper.class, Text.class, DoubleWritable.class, Text.class, DoubleWritable.class, configuration);

job.setCombinerClass(DoubleReducer.class);