gpt4 book ai didi

scala - 如果 SparkSession 没有关闭会发生什么?

转载 作者:行者123 更新时间:2023-12-03 23:39:30 26 4
gpt4 key购买 nike

下面2个有什么区别?

object Example1 {
def main(args: Array[String]): Unit = {
try {
val spark = SparkSession.builder.getOrCreate
// spark code here
} finally {
spark.close
}
}
}

object Example2 {
val spark = SparkSession.builder.getOrCreate
def main(args: Array[String]): Unit = {
// spark code here
}
}

我知道 SparkSession 实现了 Closeable 并暗示它需要关闭。但是,如果 SparkSession 只是像在 Example2 中那样创建并且从未直接关闭,我想不出任何问题。

如果 Spark 应用程序成功或失败(并退出 main 方法),JVM 将终止,SparkSession 将随之消失。它是否正确?

IMO:SparkSession 是单例的这一事实也不应该有很大的不同。

最佳答案

你应该 总是 关闭您的SparkSession当您完成使用它时(即使最终结果只是遵循回馈您所得到的东西的良好做法)。

关闭 SparkSession可能会触发释放可以提供给其他应用程序的集群资源。
SparkSession是一个 session ,因此维护一些消耗 JVM 内存的资源。您可以拥有任意数量的 SparkSession(请参阅 SparkSession.newSession 以重新创建 session ),但您不希望它们使用内存,如果您不使用它们就不应该使用内存,因此 close你不再需要的那个。
SparkSession是 Spark SQL 对 Spark Core 的 SparkContext 的包装器。因此,在幕后(就像在任何 Spark 应用程序中一样),您将拥有分配给您的 SparkSession 的集群资源,即 vcore 和内存。 (通过 SparkContext )。这意味着只要您的 SparkContext正在使用(使用 SparkSession )集群资源将不会分配给其他任务(不一定是 Spark,但也适用于提交给集群的其他非 Spark 应用程序)。这些集群资源是你的,直到你说“我完成了”,这意味着...... close .

但是,如果在 close 之后,您只需退出一个Spark应用程序,您不必考虑执行close因为无论如何资源都会自动关闭。驱动程序和执行程序的 JVM 终止,与集群的(心跳)连接也会终止,因此最终资源会返回给集群管理器,以便它可以将它们提供给其他应用程序使用。

关于scala - 如果 SparkSession 没有关闭会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058122/

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