首页 > 其他 > 详细

MapReduce工作流程及Shuffle原理

时间:2019-11-19 14:37:41      阅读:208      评论:0      收藏:0      [点我收藏+]

 

图1:

技术分享图片

 

   下文的逻辑不涉及源码:

  在文件提交到集群之前,先对文件进行切片规划,这里不再赘述。然后将切片规划信息所在文件Job.split、配置文件Job.xml、以及MapReduce程序打成的jar包提交到集群上,集群根据切片信息计算出MapTask数量,分配相应数量的机器做文件处理。这里取其中一个MapTask为例:MapTask1首先会使用InPutFormat对文件进行实际上的截取并然后使用RecordReader将文件转化为K-V对,这个阶段为format(格式化)阶段。格式化的意义在于将数据变成Mapper可以接受的对应的K-V类型,map方法经处理后又以K-V对的形式将数据写回context中。然后由outputCollector将数据进行收集,outputCollector在将数据写到shuffle之前,会计算该数据(K-V)的分区号,然后将K-V和分区号一并写入shuffle中。默认情况下只会计算出一个分区号,而上图所示为两个分区号,这是自定义分区和RedueTask导致的。

  当数据进入Shuffle后,又经历了什么呢?下面详细介绍红框内的工作流程:

技术分享图片

 

   首先,进入Shuffle的数据会在SHuffle中进行一次快排:

  技术分享图片

 

   Shuffle可以看为一个环境的集合,首尾相接。当K-V带着分区号进入Shuffle后,Shuffle会将同一分区的数据进行一次快排,Shuffle分为两个部分,按图示来说,两个部分分别用于存储索引标识和K-V对。在排序时,如果索引为2的K-V大于索引为1的K-V值,就会将标识为2的K-V的索引放到第一位。也就是说:Shuffle排序并不对数据本身做移动,而是对数据量较小的索引标识做移动,这样降低了IO压力。当数据排序完成后,并且Shuffle中存储的数据占了Shuffle空间(100mb)的80%时,会按照逆时针的顺序(2>1>4>3)将对应的K-V值溢写到磁盘中。溢写出来的数据的特点就是分区且区内有序。在数据量较大时,会发生多次溢写。

  在数据溢写到磁盘的过程中可以加一个Combiner,其本质就是一个Reducer,会对数据进行一轮的合并,比如第一轮溢写出的两个分区内的数据为{【(a,1),(a,1),(c,1)】,【(B,1),(B,1),(D,1),(D,1)】},两个分区(本例以大小写分区)内的数据虽然有序,但是数据有冗余,当相同的K-V值数量很多时,会对IO造成不必要的压力,所以在此环节中引入Combiner将数据合并为{【(a,2),(c,1)】}、{【(B,2),(D,2)】}两个分区,这样再将数据从内存写入硬盘时,IO压力就会小很多。在默认情况下Combiner是不开启的,因为在很多业务场景,Combiner会造成数据的误差。

  技术分享图片

 

   多次溢写出多组数据,假设第一组的结果如{【(a,2),(c,1)】}、{【(B,2),(D,2)】},第二轮溢写并合并的结果为{【(a,3),(c,2)】}、{【(B,1),(D,3)】}。那么进行归并排序后变成{【(a,2),(a,3),(c,1),(c,2)】},{【(B,2),(B,1),(D,2),(D,3)】}依旧会存在相同的Key的情况,那么也可以选择在归并排序时使用Combiner进行合并,结果为:{【(a,5),(c,3)】}、{【(B,3),(D,5)】}。这是一个MapTask的工作结果,当存在多个MapTask时,会产生多组输出数据,假设存在第二组:{【(a,3),(c,4)】}、{【(B,2),(D,6)】}。至此MapTask的工作完成了。

  现在进入ReduceTask阶段,假设我们设定了两个ReduceTask,并且自定义了分区规划:将分区一(key小写的一组)交给ReduceTask1来处理,将分区2交给ReduceTask2处理,那么所有MapTask输出结果中的分区1都会进入ReduceTask1中,先进行一轮归并排序,然后按照相同的Key分组,比如分区1分为两组:【(a,5),(a,3)】、【(c,3),(c,4)】,然后一组一组的进入Reducer的reduce方法,最后reduce方法将(a,8)、(c,7)写回context中,交给OutputFormat处理,最终输出两个输出文件。

  技术分享图片

 

 

  

MapReduce工作流程及Shuffle原理

原文:https://www.cnblogs.com/superlsj/p/11889250.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!