MapReduce的shuffle流程

一、MR的shuffle流程。

 1、什么是shuffle:mapreduce 主要分为map阶段和reduce阶段,map阶段主要是将从源加载过来的数据,转换为key value键值对。reduce阶段就是并行处理具有相同key的键值对,将其进行聚合处理,输出新的键值对作为结果。而为了保证reduce可以并行的处理map的结果,必须对map的输出结果进行一定的排序和分区,然后再传输至reduce上,这个过程就是shuffle。

2、shuffle过程:shuffle过程主要包括两个阶段,map shuffle和reduce shuffle。

  map shuffle:主要包括:分区、排序、分割、合并这些流程。首先,每个节点的map任务内部维护一个环形内存缓冲区,用来存储map任务的输出,默认100M。map任务产生的数据会先写进缓冲区当中,当数据达到缓冲区的阈值时,会将缓冲区中的数据溢出至本地磁盘,作为spill溢出文件。而在缓冲区溢出数据之前,会根据reduce的任务数量将缓冲区数据进行分区,并且在每个分区中是按照key进行排序的。

  ----数据先写进缓冲区,在缓冲区中先按照key进行快速排序,缓冲区的数据量达到阈值,按照reduce数量对缓冲区的数据进行分区并归并排序。然后溢写到磁盘。

  其中,若有combiner函数,这个函数则会在每个map分区排序后的输出结果上运行,用于将每次溢写出来的文件进行分区合并和归并排序。从而使map输出结果更加紧凑。https://blog.csdn.net/qq_35688140/article/details/84111972

  reduce shuffle:主要包括:复制和合并两个阶段。reduce开启复制线程从map中复制数据,其中reduce可能会从多个map中复制数据,因此一旦有一个map任务完成,就开始进行复制。数据小就保存在内存,数据量大就溢出到磁盘,最后进行排序合并这些文件。

       ----复制map输出结果到reduce的内存缓冲,数据达到阈值就溢写到磁盘,最后归并排序合并这些文件。

猜你喜欢

转载自www.cnblogs.com/guoyu1/p/12218411.html