2017-04-19 63 views
2

在做Spark性能调优时,我发现(不出所料)做广播连接可以消除混洗并提高性能。我一直在尝试在较大的连接上进行广播,并且我已经能够成功地使用我期望的更大的广播连接 - 例如,广播一个2GB的压缩(并且大得多的未压缩)数据集,运行在一个60GB节点的集群上,内存为30GB。如果Spark广播连接太大会发生什么?

但是,由于数据大小的波动,我担心将其投入生产,而且我想知道如果广播变得“太大”会发生什么。我在想象两种情况:

A)数据太大而不适合内存,所以有些数据写入磁盘,性能会略微下降。这将是好的。或者,

B)数据太大而不适合内存,所以它会抛出OutOfMemoryError并使整个应用程序崩溃。不太好。

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

回答

0

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

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

+0

广播提示像普通广播变量一样工作吗?这只是一个暗示,所以也许行为是不同的 –

相关问题