mapreduce为什么要排序

刘佳 75

mapreduce要排序的原因在于,任何应用程序中的数据均会被排序。在mapreduce的结构中,MapTask和ReduceTask这两个阶段均会对数据按照key进行排序。该操作又属于Hadoop的默认行为。因此,mapreduce要排序。

Mapreduce原理

Mapreduce是一个分布式运算程序的编程框架,是用户开发“基于hadoop的数据分析应用”的核心框架;

Mapreduce核心功能是将用户编写的业务逻辑代码和自带默认组件整合成一个完整的分布式运算程序,并发运行在一个hadoop集群上;

Mapreduce结构

一个完整的mapreduce程序在分布式运行时有三类实例进程:

1、MRAppMaster:负责整个程序的过程调度及状态协调

2、mapTask:负责map阶段的整个数据处理流程

3、ReduceTask:负责reduce阶段的整个数据处理流程

MRAppMaster阶段:

MRAppMaster启动后根据本次job的描述信息,计算出需要的maptask实例数量,然后向集群申请机器启动相应数量的maptask进程

MapTask阶段:

  1. 它会将处理的结果暂时放到环形缓冲区中,当环形缓冲区使⽤率达到⼀定阈值后,再对缓冲区中的数据进行⼀次快速排序,并将这些有序数据溢写到磁盘上;
  2. 溢写完毕后,它会对磁盘上所有文件进行归并排序。

ReduceTask阶段:

当所有数据拷贝完毕后,ReduceTask统一对内存和磁盘上的所有数据进行⼀次归并排序。

  1. 部分排序:MapReduce根据输⼊记录的键对数据集排序。保证输出的每个⽂件内部有序。
  2. 全局排序:最终输出结果只有⼀个⽂件,且⽂件内部有序。实现⽅式是只设置一个ReduceTask。但该⽅法在处理⼤型⽂件时效率极低,因为一台机器处理所有⽂件,完全丧失了MapReduce所提供的并⾏架构。
  3. 辅助排序:(GroupingComparator分组)在Reduce端对key进⾏分组。应⽤于:在接收的key为bean对象时,想让⼀个或⼏个字段相同(全部字段⽐较不相同)的key进⼊到同⼀个reduce⽅法时,可以采⽤分组排序。
  4. 二次排序:在⾃定义排序过程中,如果compareTo中的判断条件为两个即为二次排序。

回复

我来回复
  • 暂无回复内容

联系我们
关注微信
关注微信
分享本页
返回顶部