MapReduce 详细流程图总结

MapReduce 详细流程图总结

1.mapreduce阶段

  1. map阶段
  2. shuffle阶段
  3. reduce阶段

其中shuffle阶段,俗称奇迹发生的地方,主要是做了多次的分区和排序,并且对中间数据做了落地磁盘的处理,确保了数据安全,同时数据能够按照key进行划分,并且按照key排序。

2.mapreduce详细流程图

MapReduce 详细流程图总结

3.mapreduce思想总结

  1. 分布式计算其实就一个思路,如何让程序由多台计算机并行处理
  2. 程序是由数据+代码组成,这时候顺其自然的,将数据进行划分,将代码流程进行划分。这样每台计算机处理自己部分数据,每台计算机执行自己的步骤。就可以达到分布式计算的目的。
  3. mapreduce的整体思路也是如此,数据切割为多份,代码流程划分为2的大的步骤,map阶段可以由多台计算机并行执行,分别处理自己部分的数据并进行转换。reduce部分也是如此,每台计算机处理自己部分数据,并进行聚合
  4. 思路很重要,但最终落地到代码也是关键。
  5. 针对大量数据处理,在shuffle阶段,每个执行maptask的节点计算机都在内存中创建了一个环形缓冲区,所有数据以key value形式存入时,都会根据key进行分区和排序,当数据结束或者触发环形缓冲区的溢出操作时,这些分好区和排好序的数据就会被溢写到临时文件中。在文件中也会进行分区和排序
  6. 一个maptask处理的数据可能会超过80MB,这时候溢写出的临时文件可能就会由多份,所以会有一步操作,把同一个maptask溢写出的多个临时文件进行合并,合并后进行分区和排序。
  7. 当maptask结束时,会生成reducetask数量的中间文件,。
  8. 当reduce task执行时,会把这些map task生成的中间文件中,相同key的数据都取出来,并且进行分区和排序。
  9. 最后reduce代码执行时,一个key对应的所有value都被从多个map task产生的中间数据文件中取出,并且排好序了。reduce task代码执行聚合逻辑就可以了。

mapreduce整体的思路其实就是数据转换和聚合,shuffle中间的的各个阶段对key分区排序,可以看做时归并排序,这样可以极大降低后续的数据整合工作,就是把大的排序拆分到各个不同阶段处理。这样一来,每个阶段需要处理的数据量会小很多,非常适合分布式计算的及大数据量的排序和规整处理