apache-spark - 为什么 shuffle 溢出比 shuffle 读取或输出大小大得多?
问题描述
我有一个相当简单的 PySpark 作业,其中最后阶段读取一些混洗数据,在窗口上执行一些聚合,然后写入 HDFS。中值任务有:
- 130 MB 随机读取
- 3.4 MB 输出大小(写入 HDFS)
- 2.0 GB shuffle 溢出(内存)
- 140 MB shuffle 溢出(磁盘)
任务之间存在偏差,但没有什么戏剧性的。
我的问题:由于每个任务只读取了 130 MB 的 shuffle,并且没有 shuffle 写入(因为没有后期阶段),每个任务怎么可能有 2 GB 的 shuffle 溢出?
我的理解是,如果 executor 上占用太多 RAM,shuffle 数据就会从内存溢出到磁盘。但是这里从内存中溢出的数量比洗牌数据的总大小要大得多。一般来说,shuffle 溢出怎么会大于 shuffle 数据的大小?
解决方案
推荐阅读
- reactjs - 在上下文提供程序中使用 withRouter 会导致错误:“Invariant failed: You should not use
外面 " - amazon-web-services - AWS IoT Analytics 增量窗口
- c# - 在 .NET 中加载 ECC 私钥
- c# - Unity 如何读取 MP4 视频元数据并获取视频的主要品牌
- angularjs - Angularjs日期管道过滤器给出错误的输出
- tensorflow - 将张量流模型转换为精简版的问题
- php - 如果其中一个表包含 mysql 中的单词或字符串,如何不显示任何内容?
- python - 如何在关闭时停止具有无限循环的 Python 守护程序线程?
- javascript - Javascript:遍历数组并修改数组内的项目
- javascript - 通过 const 从一个组件到另一个组件的数据?