2

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

4

3 回答 3

1

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

也许考虑这两个选项:

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

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

于 2012-07-14T23:09:39.470 回答
0

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

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

另外,请注意

1)mapper的o/p要和reducer的i/p匹配。

2)mapper的o/p要和combiner的i/p匹配。

3)combiner的i/p和o/p应该是同一类型的。

于 2012-07-15T03:41:50.967 回答
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);
于 2015-10-24T13:04:20.783 回答