MapReduce 确保每个reducer 的输入都是按键进行排序的。系统执行排序,将map 输出作为输入传给reducer 的过程称为shuffle。
关于hadoop 的shuffle 过程理解(面试题系列~~~)

map 端的shuffle 过程

写入磁盘

map 端会先将输出写入到内存缓冲区,当内存缓冲区到达指定的阈值时,一个后台线程就开始将缓冲区的内容spill 到磁盘。

分区&排序

在写入磁盘之前,线程首先根据数据最终要到达的reducer 将数据划分为相应的分区。在每个分区中,后台线程按键进行内存中排序。(分区的目的是将数据划分到不同的Reducer 上去,以期望达到负载均衡)

合并阶段

每个map 任务可能产生多个spill 文件,在任务完成之前,spill 文件会被合并为一个已分区已排序的输出文件。

reduce 端的shuffle 过程

复制阶段

每个reduce 任务需要若干个map 任务的输出作为输入,每个map 任务的完成时间可能不同,因此在每个任务完成时,reduce 任务就开始复制其输出。

这就是reduce 任务的复制阶段。reduce 任务有少量的复制线程,因此能够并行取得map 输出。

合并阶段

复制完所有map 输出后,reduce 任务进入合并阶段。这个阶段将合并map 输出,并维持其顺序排序。最后将合并结果数据直接输入reduce 函数。

相关文章:

  • 2022-01-09
  • 2021-06-16
  • 2021-11-12
  • 2021-10-02
  • 2021-10-29
  • 2021-06-21
  • 2021-12-03
猜你喜欢
  • 2021-09-23
  • 2021-06-15
  • 2021-10-21
  • 2021-08-28
  • 2021-06-09
  • 2021-06-30
相关资源
相似解决方案