6

我有一些输入数据以值类型 Iterator 进入减速器。如何将此值列表排序为升序?

我需要按顺序对它们进行排序,因为它们是时间值,然后在减速器中处理所有内容。

4

2 回答 2

6

要使用hadoop的内置功能实现reducer输入值的排序,您可以这样做:

1.Modify map output key - 追加map output key对应的value。发出这个复合key和map中的value。由于hadoop默认使用整个key进行排序,map输出记录会按照(你的旧key+value)排序.

2.虽然在步骤1中进行了排序,但您在过程中已经操作了map输出key。Hadoop默认根据key进行Partitioning和Grouping。

3.由于您修改了原始密钥,因此需要注意修改 Partitioner 和 GroupingComparator 以基于旧密钥工作,即仅复合密钥的第一部分。Partitioner - 决定哪些键值对位于同一个 Reducer 实例中
GroupComparator - 决定哪些键值对在降落到 Reducer 中的键值对转到相同的 reduce 方法调用。

4.最后(很明显)你需要在reducer中提取输入键的第一部分来获取旧键。

如果您需要更多(和更好)的答案,请转到 Hadoop Definitive Guide 3rd Edition -> 第 8 章 -> 排序 -> 二级排序

于 2013-02-22T07:01:49.450 回答
6

您要求的称为二级排序。简而言之-您扩展键以向其添加“值排序键”并使hadoop仅按“真实键”分组,但同时按两者进行排序。
这是关于二级排序的一个很好的解释:http:
//pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/

于 2013-02-22T17:02:49.797 回答