mapreduce为什么要排序
mapreduce要排序的原因在于:任何应用程序中的数据均会被排序,而不管逻辑上是否需要。默认排序是按照字典顺序排序,且实现该排序的方法是快速排序。MapTask和ReduceTask均会对数据按照key进行排序。该操作属于Hadoop的默认行为。因此,mapreduce要排序。
MapTask阶段:
- 它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使⽤率达到⼀定阈值后,再对缓冲区中的数据进行⼀次快速排序,并将这些有序数据溢写到磁盘上;
- 溢写完毕后,它会对磁盘上所有文件进行归并排序。
ReduceTask阶段:
当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行⼀次归并排序。
- 部分排序:MapReduce根据输⼊记录的键对数据集排序。保证输出的每个⽂件内部有序。
- 全局排序:最终输出结果只有⼀个⽂件,且⽂件内部有序。实现⽅式是只设置一个ReduceTask。但该⽅法在处理⼤型⽂件时效率极低,因为一台机器处理所有⽂件,完全丧失了MapReduce所提供的并⾏架构。
- 辅助排序:(GroupingComparator分组)在Reduce端对key进⾏分组。应⽤于:在接收的key为bean对象时,想让⼀个或⼏个字段相同(全部字段⽐较不相同)的key进⼊到同⼀个reduce⽅法时,可以采⽤分组排序。
- 二次排序:在⾃定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。