【发布时间】:2015-08-28 03:33:20
【问题描述】:
我正在运行一个包含 2 个工作人员的 Spark 流应用程序。 应用程序具有连接和联合操作。
所有批次都成功完成,但注意到 shuffle 溢出指标与输入数据大小或输出数据大小不一致(溢出内存超过 20 次)。
请在下图中找到火花阶段的详细信息:
研究了一下,发现
当没有足够的内存用于随机播放数据时,会发生随机播放溢出。
Shuffle spill (memory) - 溢出时内存中数据的反序列化形式的大小
shuffle spill (disk) - 溢出后磁盘上数据的序列化形式的大小
由于反序列化数据比序列化数据占用更多空间。所以,Shuffle 溢出(内存)更多。
注意到这个溢出内存大小对于大量输入数据来说非常大。
我的查询是:
这种溢出是否会显着影响性能?
如何优化这种内存和磁盘溢出?
是否有任何 Spark 属性可以减少/控制这种巨大的溢出?
【问题讨论】:
-
@mitchus 部分是的,我只是增加了任务的数量并为随机播放分配了更多的内存。另外,我已经优化了我的代码以压缩数据结构大小......
标签: apache-spark spark-streaming apache-spark-1.4