按键排序Mapper输出,然后按值排序

时间:2012-11-21 04:36:35

标签: hadoop mapreduce

我正在尝试编写一个示例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

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

我想我应该使用Secondary Sort来完成这项任务,但不知道如何使用它。

有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

高层:

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

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

编辑:我发现你可能还需要编写一个分区程序,因为你需要确保那些显然具有不同值(但都在同一天)的密钥被发送到同一个分区。 / p>

答案 1 :(得分:0)

拥有自定义Hadoop WritableComparable,如TextPair对示例TEXT PAIR

  • 将它用作KEY,将你的日期作为TextPair类中的第一个元素, 和时间作为第二个。

如果您想要为不同TIME的相同日期分配不同的Reducer,请使用自定义分区程序,该分区程序将根据单独日期进行分区