gpt4 book ai didi

R Shiny 和 Spark : how to free Spark resources?

转载 作者:行者123 更新时间:2023-12-04 20:04:07 28 4
gpt4 key购买 nike

假设我们有一个 Shiny 应用程序部署 在 Shiny 服务器上。我们预计该应用将像往常一样通过网络浏览器供多个用户使用。

Shiny 应用程序的 server.R 包含一些 sparklyr 包代码,它连接到经典 filter 的 Spark 集群,selectmutatearrange 操作位于 HDFS 上的数据。

是否必须断开与 Spark 的连接:在服务器末尾包含一个 spark_disconnect。R 代码以释放资源? 我认为我们永远不应该断开连接Spark 为每个到达和离开的用户处理负载。有人可以帮我确认一下吗?

最佳答案

TL;DR SparkSessionSparkContext 不是可以按需启动的轻量级资源。

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

server 函数将在每次即将发生的事件有效地重新启动整个 Spark 应用程序并使项目无法使用时执行。而这只是冰山一角。由于 Spark 重用现有的 session(单个 JVM 只允许一个上下文),如果重用的 session 已从另一个 server 调用中停止,则多用户访问可能会导致随机失败。

一个可能的解决方案是注册 onSessionEnded使用 spark_disconnect,但我很确定它只在单用户环境中有用。

另一种可能的方法是使用全局连接,并在退出时用函数调用 spark_disconnect_all 包装 runApp:

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

虽然在实践中资源管理器应该在驱动程序解除关联时释放资源,而不是明确地停止 session 。

关于R Shiny 和 Spark : how to free Spark resources?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44325625/

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