我正在运行一个有 2 个工作人员的 Spark 流应用程序。应用程序具有连接和联合操作。
所有批次都成功完成,但注意到 shuffle 溢出指标与输入数据大小或输出数据大小不一致(溢出内存超过 20 次)。
请在下图中找到火花阶段的详细信息:
对此进行了研究,发现
当没有足够的内存用于 shuffle 数据时,就会发生 Shuffle 溢出。
Shuffle spill (memory)
- 溢出时内存中数据的反序列化形式的大小
shuffle spill (disk)
- 溢出后磁盘上数据的序列化形式的大小
由于反序列化数据比序列化数据占用更多空间。所以,Shuffle 溢出(内存)更多。
注意到这种溢出内存大小对于大输入数据来说非常大。
我的查询是:
这种溢出是否会显着影响性能?
如何优化这种内存和磁盘溢出?
是否有任何 Spark Properties 可以减少/控制这种巨大的溢出?