什么是在同一个JVM上运行多个任务星火的好处?

问题描述 投票:7回答:2

不同的源(例如12)声称火花可以从在相同的JVM运行多个任务受益。但他们并没有解释原因。

这些是什么好处?

java scala performance apache-spark jvm
2个回答
4
投票

可能最大的优势是共享内存,特别是处理广播对象。因为这些对象被认为是只读可以有多个线程之间共享。

在方案中,当你使用一个单一的任务/执行你需要的副本每个JVM所以用N个任务有N份。对于大型对象,这会是一个严重的开销。

相同的逻辑可被应用于其他共享对象。


4
投票

因为它已经说过广播变量是一回事。

另一种是与并发问题。看看这个代码:

var counter = 0
var rdd = sc.parallelize(data)

rdd.foreach(x => counter += x)

println(counter)

结果可以是根据不同的,不管是本地的或在部署于簇火花执行(具有不同的JVM)。在后一种情况下,parallelize方法拆分执行人之间的计算。封闭件(需要为每个节点执行其任务环境)被计算,这意味着,每一个执行接收counter的副本。每个执行器看到其自己的变量的副本,从而计算的结果为0,因为没有执行程序的引用的权利对象。在另一方面counter一个JVM是每一个工人可见。

当然,有一种方法,以避免 - 使用Acumulators(see here)。

最后但并非最不重要的内存持续RDDs时(默认cache方法保存级别MEMORY_ONLY),这将是一个JVM中可见。这也可以通过使用克服OFF_HEAP(这是在实验2.4.0)。更多here

© www.soinside.com 2019 - 2024. All rights reserved.