我有一些输入数据以值类型 Iterator 进入减速器。如何将此值列表排序为升序?
我需要按顺序对它们进行排序,因为它们是时间值,然后在减速器中处理所有内容。
要使用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 章 -> 排序 -> 二级排序
您要求的称为二级排序。简而言之-您扩展键以向其添加“值排序键”并使hadoop仅按“真实键”分组,但同时按两者进行排序。
这是关于二级排序的一个很好的解释:http:
//pkghosh.wordpress.com/2011/04/13/map-reduce-secondary-sort-does-it-all/