3

我正在尝试编写一个示例 Map Reduce 程序,其 Mapper 输出如下所示:

1/1/2012        15:11:46
1/1/2012        19:09:26
1/1/2012        14:01:25
1/1/2012        17:32:26
1/1/2012        17:41:00
1/1/2012        19:35:38
1/1/2012        14:28:10
1/1/2012        15:45:55

我希望我对减速器的输入按键排序,然后按值排序。默认情况下,Hadoop 框架仅按键对映射器输出进行排序。

我想我应该使用辅助排序来完成这项任务,但不知道如何使用它。

谁能帮我解决这个问题?

4

2 回答 2

1

在高水平:

  • 使您的键成为当前键和值的串联。保持值不变。
  • 创建一个分组比较器,它采用两个键(它们是连接),仅提取日期并返回两个日期的比较。这使得所有具有相同日期的记录在一次调用 reduce() 时被传递。
  • 使用所有其他作业和配置设置在作业驱动程序中指定分组比较器。

请注意,您显示的日期值不会按日期按词汇排序 - 您希望年份排在第一位。

编辑:在我看来,您可能还必须编写一个分区程序,因为您要确保将显然具有不同值(但都在同一天)的键发送到同一个分区。

于 2012-11-21T04:45:21.563 回答
0

有一个自定义的 Hadoop WritableComparable,如 TextPair 对示例TEXT PAIR

  • 将其用作 KEY,将 Date 作为 TextPair 类中的第一个元素,将 time 作为第二个元素。

如果您不想分配 Diffrent Reducer,对于具有不同 TIME 的相同日期,请使用自定义分区器,该分区器将基于 Date Alone 进行分区

于 2013-10-11T13:04:30.887 回答