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

Fre*_*ddy 6 hadoop mapreduce

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

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

Esw*_*apa 6

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

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

2.虽然排序是在步骤1中完成的,但是你在这个过程中操作了map输出key。Hadoop默认是根据key做Partitioning Grouping的。

3.Since你已经修改了原来的钥匙,需要采取基于旧密钥,即,只有您的复合键的第一部分修改分区程序并GroupingComparator工作的关心。Partitioner - 决定哪些键值对进入同一个 Reducer 实例
GroupComparator - 决定哪些键值对进入 Reducer 进入同一个 reduce 方法调用。

4.最后(显然)您需要在减速器中提取输入键的第一部分以获得旧键。

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


Dav*_*man 6

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