2017-04-19 103 views
2

在做Spark性能調優時,我發現(不出所料)做廣播連接可以消除混洗並提高性能。我一直在嘗試在較大的連接上進行廣播,並且我已經能夠成功地使用我期望的更大的廣播連接 - 例如,廣播一個2GB的壓縮(並且大得多的未壓縮)數據集,運行在一個60GB節點的集羣上,內存爲30GB。如果Spark廣播連接太大會發生什麼?

但是,由於數據大小的波動,我擔心將其投入生產,而且我想知道如果廣播變得「太大」會發生什麼。我在想象兩種情況:

A)數據太大而不適合內存,所以有些數據寫入磁盤,性能會略微下降。這將是好的。或者,

B)數據太大而不適合內存,所以它會拋出OutOfMemoryError並使整個應用程序崩潰。不太好。

所以我的問題是:當Spark廣播連接太大時會發生什麼?

回答

0

廣播變量是純粹的本地對象,不包括分佈和序列化它們的行爲與您使用的任何其他對象相同。如果他們不適合記憶,你會得到OOM。除了內存分頁以外,沒有什麼魔法可以阻止這種情況發生。

因此,廣播不適用於可能不適合內存的對象(併爲標準Spark操作留下大量可用內存)。

+0

廣播提示像普通廣播變量一樣工作嗎?這只是一個暗示,所以也許行爲是不同的 –

相關問題