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

在Hadoop中处理之前对输入迭代器值进行排序,hadoop,mapreduce,Hadoop,Mapreduce,我使用值类型迭代器将一些输入数据发送到reducer。 如何将此值列表按升序排序 因为它们是时间值,所以我需要在处理reducer中的所有数据之前对它们进行排序。要使用hadoop的内置功能对reducer输入值进行排序,可以执行以下操作: 1.修改map output key-将map output key追加相应的值。从map发出此复合键和值。由于hadoop默认使用整个键进行排序,所以map输出记录将按(旧键+值)排序 2.虽然排序是在步骤1中完成的,但在这个过程中您已经操作了map ou

我使用值类型迭代器将一些输入数据发送到reducer。 如何将此值列表按升序排序


因为它们是时间值,所以我需要在处理reducer中的所有数据之前对它们进行排序。

要使用hadoop的内置功能对reducer输入值进行排序,可以执行以下操作:

1.修改map output key-将map output key追加相应的值。从map发出此复合键和值。由于hadoop默认使用整个键进行排序,所以map输出记录将按(旧键+值)排序

2.虽然排序是在步骤1中完成的,但在这个过程中您已经操作了map output键。Hadoop默认情况下会基于该键进行分区和分组

3.由于您已经修改了原始密钥,因此需要注意修改Partitioner和GroupingComparator,使其基于旧密钥(即,仅复合密钥的第一部分)工作。 分区器-决定哪些键值对位于同一个Reducer实例中
GroupComparator—决定进入Reducer的键值对中的哪些键值对将转到同一个reduce方法调用

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


如果您需要更多(和更好)的答案,请参阅Hadoop权威指南第3版->第8章->排序->二次排序。简言之,您可以扩展该键以向其添加“值排序键”,并使hadoop只按“实键”进行分组,而按两者进行排序
下面是关于二次排序的一个很好的解释:

我不确定我是否完全理解您希望在减少之前进行排序的动机。确切地说,David Gruzman在这方面引用了一个很好的例子