2015-09-20 45 views
0

根據Spark Tuning Tips,可以在大對象上使用廣播功能來減少每個序列化任務的大小。在Apache Spark中廣播小變量會值得嗎?

這對我來說很有意義,但我的問題是,對於像Integer或Boolean對象這樣的小對象,是否值得讓對象創建開銷來廣播它們?我的直覺是,它是不鼓勵的,但我無法找到任何令人信服的解釋在這個頂尖的網上,請幫助,如果你做了一些基準和研究。

這裏是定義的變量的代碼:

final Broadcast<String> someFolderBroadcast = javaSparkContext.broadcast(someFolder); 
final Broadcast<Boolean> someModeBroadcast = javaSparkContext.broadcast(isSomeMode); 

someFolderBroadcast.value()和someModeBroadcast.value()用於在廣播變量來檢索所存儲的值。

+1

Spark在主服務器上打印每個任務的序列化大小,因此您可以查看該任務以確定您的任務是否過大。一般而言,大於20 KB的任務可能值得優化。那麼你的任務的規模是多少? – eliasah

+1

@eliasah,我無法在集羣上運行程序,因爲我正在執行代碼審查。原作者正在廣播單個布爾或整數變量,我認爲這不值得創建一個廣播對象的開銷,但我找不到相關主題的任何文章。 –

+0

發佈您正在執行的代碼 – eliasah

回答

2

Spark會在主服務器上打印每個任務的序列化大小,因此您可以查看該任務以確定您的任務是否過大。一般來說,大於20 KB的任務可能值得優化。

因此,如果您的變量(或任務)大於20 KB,請廣播它們!

相關問題