2015-09-20 44 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,请广播它们!

相关问题