如果Spark广播加入太大会发生什么?

时间:2017-04-19 15:52:28

标签: apache-spark

在进行Spark性能调优时,我发现(毫不奇怪)执行广播连接可以消除混乱并提高性能。我一直在尝试在更大的连接上进行广播,并且我已经能够成功地使用我预期的更大的广播连接 - 例如广播一个2GB压缩(和更大的未压缩)数据集,在具有30GB内存/节点的60节点集群上运行。

然而,由于我们的数据大小波动,我担心将其投入生产,并且我想知道如果广播变得太大而会发生什么?#34;我想象两个场景:

A)数据太大而无法容纳在内存中,因此其中一些数据会写入磁盘,性能会略有下降。这没关系。或者,

B)数据太大而无法容纳在内存中,因此会抛出OutOfMemoryError并导致整个应用程序崩溃。不太好。

所以我的问题是:当Spark广播加入太大时会发生什么?

1 个答案:

答案 0 :(得分:0)

广播变量是普通的本地对象,不包括分发和序列化,它们的行为与您使用的任何其他对象相同。如果它们不适合记忆,你会得到OOM。除了内存分页之外,没有任何魔法可以阻止它。

因此广播不适用于可能不适合内存的对象(并为标准Spark操作留下大量可用内存)。