二次排序问题是指在归约阶段对与某个键关联的值排序,有时也称为值键转换。
利用二次排序可以使归约阶段的值是有序的。
MapReduce框架对映射器生成的键排序,传入归约器的数据都是按键排序的。
利用MapReduce框架完成二次排序的方法
构造一个组合中间键(K , V) ,其中K是分区键,V是用来排序的值
此中间键做为Map的输出的键,Map的输出会按照此组合键排序;
定制Partitioner,不再以Map输出的中间键直接做哈希,而是只取组合键中的Key做哈希
这样Map的输出同样Key的数据会被分发到同一个Reducer , 而且是按照(K , V)组合键排好序的。
定制分组比较器
分发到各个Reducer中的数据的Key依然是(K,V)组合键,而数据是不应该对(K,V)组合键来做归约的,而是应该以K来做归约,为了实现以K来归约,我们需要自定义分组比较器。
分级比较器用来比较两个组合键,如果返回如果相同则在一组做归约,所以定制的分组比较器只需要比较其中的K。
代码实现,暂略。

本文介绍如何在MapReduce中实现二次排序,通过构造组合中间键并定制Partitioner和分组比较器,确保归约阶段的数据按特定顺序排列。
668

被折叠的 条评论
为什么被折叠?



