gpt4 book ai didi

java - 在同一个 JVM 中运行多个 Spark 任务有什么好处?

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:19:35 27 4
gpt4 key购买 nike

不同的来源(例如 12 )声称 Spark 可以受益于在同一个 JVM 中运行多个任务。但他们没有解释原因。

这些好处是什么?

最佳答案

如前所述,广播变量是一回事。

另一个是并发问题。看一下这段代码:

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

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

println(counter)

结果可能会有所不同,具体取决于是在本地执行还是在部署在集群(具有不同 JVM)上的 Spark 上执行。在后一种情况下,parallelize 方法在执行器之间拆分计算。计算闭包(每个节点执行其任务所需的环境),这意味着每个执行者都会收到一份 counter。每个执行者都看到自己的变量副本,因此计算结果为 0,因为没有一个执行者引用了正确的对象。另一方面,在一个 JVM 中,counter 对每个 worker 都是可见的。

当然有一种方法可以避免这种情况 - 使用 Acumulators ( see here )。

最后但并非最不重要的一点是,当将 RDD 持久化在内存中时(默认 cache 方法存储级别为 MEMORY_ONLY),它将在单个内存中可见虚拟机。这也可以通过使用 OFF_HEAP 来克服(这在 2.4.0 中是实验性的)。更多 here .

关于java - 在同一个 JVM 中运行多个 Spark 任务有什么好处?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47641025/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com