6. Shuffle 过程

map 阶段处理的数据如何传递给 reduce 阶段,是 MapReduce 框架中最关键的一个流 程,这个流程就叫 shuffle

shuffle: 洗牌、发牌 ——(核心机制:数据分区,排序,分组,规约,合并等过程)
大数据-Shuffle过程

shuffle 是 Mapreduce 的核心,它分布在 Mapreduce 的 map 阶段和 reduce 阶段。一般 把从 Map 产生输出开始到 Reduce 取得数据作为输入之前的过程称作 shuffle。

  1. Collect阶段 :将 MapTask 的结果输出到默认大小为 100M 的环形缓冲区,保存的是 key/value,Partition 分区信息等。
  2. Spill阶段 :当内存中的数据量达到一定的阀值的时候,就会将数据写入本地磁盘,在 将数据写入磁盘之前需要对数据进行一次排序的操作,如果配置了 combiner,还会将 有相同分区号和 key 的数据进行排序。
  3. Merge阶段 :把所有溢出的临时文件进行一次合并操作,以确保一个 MapTask 最终只 产生一个中间数据文件。
  4. Copy阶段 :ReduceTask 启动 Fetcher 线程到已经完成 MapTask 的节点上复制一份 属于自己的数据,这些数据默认会保存在内存的缓冲区中,当内存的缓冲区达到一定 的阀值的时候,就会将数据写到磁盘之上。
  5. Merge阶段 :在 ReduceTask 远程复制数据的同时,会在后台开启两个线程对内存到 本地的数据文件进行合并操作。
  6. Sort阶段 :在对数据进行合并的同时,会进行排序操作,由于 MapTask 阶段已经对 数据进行了局部的排序,ReduceTask 只需保证 Copy 的数据的最终整体有效性即可。 Shuffle 中的缓冲区大小会影响到mapreduce 程序的执行效率,原则上说,缓冲区越 大,磁盘io的次数越少,执行速度就越快缓冲区的大小可以通过参数调整, 参数:mapreduce.task.io.sort.mb 默认100M

相关文章:

  • 2021-06-16
  • 2021-06-09
  • 2021-07-28
  • 2021-05-05
  • 2021-12-28
  • 2022-12-23
  • 2021-08-07
  • 2021-04-12
猜你喜欢
  • 2021-09-28
  • 2021-09-25
  • 2021-05-03
  • 2021-06-19
  • 2021-08-12
  • 2021-06-29
相关资源
相似解决方案