在Hadoop中处理之前对reducer输入迭代器值进行排序

时间:2013-02-22 04:18:12

标签: hadoop mapreduce

我有一些输入数据来到reducer,值类型为Iterator。 如何将此值列表按升序排序?

我需要按顺序对它们进行排序,因为它们是时间值,然后在reducer中处理全部。

2 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

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

1.修改地图输出键 - 使用相应的值附加地图输出键。发出此复合键和map中的值。由于hadoop默认使用整个键进行排序,因此地图输出记录将按(旧键)排序+值)。

2.尽管在步骤1中完成了排序,但您已经在流程中操作了地图输出键.Hadoop默认情况下会根据键进行分区和分组。

3.由于您修改了原始密钥,需要根据旧密钥(即仅复合密钥的第一部分)来修改Partitioner和GroupingComparator。 分区程序 - 决定哪些键值对落在同一个Reducer实例中 GroupComparator - 决定落入Reducer的那些键值对进入相同的reduce方法调用。

4.最后(显然)你需要在reducer中提取输入键的第一部分以获得旧密钥。

如果您需要更多(更好)的答案,请转到Hadoop权威指南第3版 - >第8章 - >排序 - >二级排序