我有两个mapper类,它们处理不同的输入,但是它们的输出将采用相同的格式并将转到同一个reducer。是否可以只为两个映射器类中的一个实现组合器?
答案 0 :(得分:1)
使用组合器,如果您将Hadoop MR设置为使用它,它将处理来自所有映射器的输出。您无法指定特定的映射器。
也许考虑以下两个选项:
将合并器应用于所有输出 - 将映射器的输出映射到通用类型,以便它们可以由Reducers处理(连接?)。考虑一下,无论数据来自哪个映射器,组合都能正常工作。对这个想法的修改是在键中设置一个类型变量或从映射器输出的值,并在组合中使用它来决定天气做任何事情。
使用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);