首页 > 解决方案 > 为什么 shuffle 溢出比 shuffle 读取或输出大小大得多?

问题描述

我有一个相当简单的 PySpark 作业,其中最后阶段读取一些混洗数据,在窗口上执行一些聚合,然后写入 HDFS。中值任务有:

  1. 130 MB 随机读取
  2. 3.4 MB 输出大小(写入 HDFS)
  3. 2.0 GB shuffle 溢出(内存)
  4. 140 MB shuffle 溢出(磁盘)

任务之间存在偏差,但没有什么戏剧性的。

我的问题:由于每个任务只读取了 130 MB 的 shuffle,并且没有 shuffle 写入(因为没有后期阶段),每个任务怎么可能有 2 GB 的 shuffle 溢出?

我的理解是,如果 executor 上占用太多 RAM,shuffle 数据就会从内存溢出到磁盘。但是这里从内存中溢出的数量比洗牌数据的总大小要大得多。一般来说,shuffle 溢出怎么会大于 shuffle 数据的大小?

标签: apache-sparkpyspark

解决方案


推荐阅读