【发布时间】:2015-09-20 06:56:19
【问题描述】:
根据Spark Tuning Tips,广播功能可用于大型对象以减小每个序列化任务的大小。
这对我来说很有意义,但我的问题是,对于像 Integer 或 Boolean 对象这样的小对象,是否仍然值得有对象创建开销来广播它们?我的预感是不鼓励,但我在网上找不到任何令人信服的解释,如果你做过一些基准测试和研究,请帮忙。
下面是定义变量的代码:
final Broadcast<String> someFolderBroadcast = javaSparkContext.broadcast(someFolder);
final Broadcast<Boolean> someModeBroadcast = javaSparkContext.broadcast(isSomeMode);
someFolderBroadcast.value() 和 someModeBroadcast.value() 用于检索广播变量中存储的值。
【问题讨论】:
-
Spark 会在 master 上打印每个任务的序列化大小,因此您可以通过查看来判断您的任务是否太大。通常,大于 20 KB 的任务可能值得优化。那么你的任务规模是多少?
-
@eliasah,我无法在集群上运行程序,因为我正在进行代码审查。原作者正在广播单个布尔或整数变量,我认为这不值得创建广播对象的开销,但我找不到任何相关主题的文章..
-
贴出你正在执行的代码
-
@eliasah,我已经编辑了这个问题,请看一下,让我知道你的想法,非常感谢你的帮助!
-
如果没有,请不要播放!