排序顺序
默认由RawComparator 控制
if mapred.output.key.comparator.Class 被设置 / JobConf setOutputKeyComparatorClass 方法
使用这个类的实例作为比较器
else 自定义比较器必须继承WritableComparator , 比较对象必须 是 继承 WritableComparable子类
如果没有自定义的comparator, 使用RawComparator进行反序列化 , 委托给 WritableComparable 子类的 compareTo方法
全局排序
二次排序
Map: Mapper -> [first sort] to generate partition(extends
Partitioner<CombinationKey,IntWritable> job.setPartitionerClass(DefinedPartition.class) )
->
[second sort] for sorting cross-group and in-group data
(
job.setSortComparatorClass(DefinedComparator.class) )
->
shuffle
Reduce: [group] ( { [sort1, 1],[sort1,2] } => [sort1,(1,2)] )
(job.setGroupingComparatorClass(DefinedGroupSort.class))
=> reduce
实例参考 http://zengzhaozheng.blog.51cto.com/8219051/1379271
本文详细介绍了Hadoop中实现二次排序的方法,包括如何通过自定义Partitioner和Comparator来控制MapReduce任务中的排序流程。首先解释了默认排序机制,并进一步探讨了如何通过自定义组件来实现更复杂的排序需求。
1万+

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



