R闪亮与火花:如何释放火花资源?

R闪亮与火花:如何释放火花资源?,r,apache-spark,shiny,sparklyr,R,Apache Spark,Shiny,Sparklyr,假设我们有一个部署在闪亮服务器上的闪亮应用程序。我们预计,该应用程序将像往常一样,通过其web浏览器供多个用户使用 闪亮的应用程序的server.R包括一些sparkyr包代码,该包代码连接到Spark群集,用于经典过滤器,选择,变异,以及对位于HDFS上的数据执行排列操作 是否必须断开与Spark的连接:在服务器端添加一个Spark\u disconnect,以释放资源?我认为我们永远不应该断开与Spark的连接,让Spark为每个到达和离开的用户处理负载。有人能帮我确认一下吗;DRSpark

假设我们有一个部署在闪亮服务器上的闪亮应用程序。我们预计,该应用程序将像往常一样,通过其web浏览器供多个用户使用

闪亮的应用程序的
server.R
包括一些
sparkyr
包代码,该包代码连接到Spark群集,用于经典
过滤器
选择
变异
,以及对位于HDFS上的数据执行
排列
操作


是否必须断开与Spark的连接:在服务器端添加一个
Spark\u disconnect
,以释放资源?
我认为我们永远不应该断开与Spark的连接,让Spark为每个到达和离开的用户处理负载。有人能帮我确认一下吗;DR
SparkSession
SparkContext
不是可按需启动的轻量级资源

抛开与直接从面向用户的应用程序启动Spark会话相关的所有安全注意事项不谈,在服务器内部维护
SparkSession
(进入时启动会话,退出时停止)根本不是一个可行的选择

服务器
功能将在每次有即将到来的事件时执行,有效地重新启动整个Spark应用程序,并使项目无法使用。这只是冰山一角。由于Spark重用现有的
会话
(单个JVM只允许一个上下文),如果从另一个
服务器
调用停止重用的会话,多用户访问可能会导致随机故障

一个可能的解决方案是注册
spark\u disconnect
,但我确信它只在单用户环境中有用

另一种可能的方法是使用全局连接,并在退出时使用调用函数
spark\u disconnect\u all
包装
runApp

runApp <- function() {
  shiny::runApp()
  on.exit({
    spark_disconnect_all()
  })
}

runApp谢谢,这意味着我不应该包括任何与闪亮服务器.R代码相关的Spark会话或上下文连接。代码必须重用已存在的会话和上下文。当然,我不应该停止/断开这些。我的理解正确吗?
SparkSession
存在于Spark驱动程序中。但是执行器可能会被自动神奇地设置和丢弃(除非它们在与驱动程序相同的JVM中运行,即在
local
模式下)cf.
spark.dynamicAllocation.*
spark.shuffle.service.*
在@SamsonScharfrichter中动态分配在这里有什么关系
spark\u connect
spark\u disconnect
管理驱动程序和会话。@SamsonScharfrichter只是想澄清一下:这是一个真正的spark群集,使用的是纱线(没有本地模式,也没有独立模式)@zero323>问题是“如何释放spark资源”,执行者使用的资源如何算作“spark资源”。。。“Spark提供了一种机制,可以根据工作负载动态调整应用程序占用的资源。。。默认情况下已禁用。。。可在所有粗粒度集群管理器上使用”(即不在
local
模式下)cf。