【SPARK-CORE】shuffle机制

本文主要介绍spark的shuffle机制

 

shuffle的产生

Spark 作业被分解为多个 Stage,每个 Stage 包含多个任务(Task)。在需要重新分区的数据操作时因为需要进行数据的交换因此会产生 Shuffle 边界,即两个 Stage 之间需要进行 Shuffle 操作。

 

shuffle的各个阶段

1、shuffle map阶段

  • 每个 Shuffle Map 任务会处理一个 RDD 分区的数据,并根据 Shuffle 操作(如 groupByKey)的键对数据进行哈希分组。
  • 这些数据分组的结果被写入到中间存储(本地磁盘或内存),每个任务会为每个 Reduce 任务准备一份数据。

每个shuffle map任务写自己的数据到自己的一个环形缓冲区中当到达一定阈值的时候就进行溢写磁盘的操作,生成临时文件

2、数据序列化与写入

  • Shuffle Map 任务会将处理后的数据序列化,并写入到中间文件中(即临时存储)。
  • 每个 Shuffle Map 任务为每个 Reduce 任务创建一个分区文件。

这些临时文件通常存储在 Executor 的本地磁盘上,文件名根据 Shuffle ID 和分区 ID 编号。

3、shuffle reduce阶段

  • 每个 Shuffle Reduce 任务会从所有 Shuffle Map 任务中拉取(Fetch)属于自己的那部分数据,存储在内存中(如果内存不足,则被溢写到磁盘)并对这些数据进行反序列化。
  • 然后,Shuffle Reduce 任务会对数据进行合并和处理(如 reduce 操作)。

4、最终,Shuffle Reduce 任务会将处理后的数据写入到输出 RDD 分区中,完成 Shuffle 过程。

shuffle中间文件的优化

1、hashshufflemanager存在的问题

M个shuffle map任务,R个shuffle reduce任务会产生M*R个中间临时文件。

 

posted @ 2024-06-15 18:09  fanrucong  阅读(5)  评论(0编辑  收藏  举报