为啥 SparkContext 会随机关闭,如何从 Zeppelin 重新启动?
Posted
技术标签:
【中文标题】为啥 SparkContext 会随机关闭,如何从 Zeppelin 重新启动?【英文标题】:Why does SparkContext randomly close, and how do you restart it from Zeppelin?为什么 SparkContext 会随机关闭,如何从 Zeppelin 重新启动? 【发布时间】:2016-06-01 14:32:00 【问题描述】:我正在 Zeppelin 编写 spark-sql 查询,有时我突然开始收到此错误(在未更改代码之后):
Cannot call methods on a stopped SparkContext.
然后输出再往下说:
The currently active SparkContext was created at:
(No active SparkContext.)
这显然没有意义。这是 Zeppelin 中的错误吗?还是我做错了什么?如何重启 SparkContext?
谢谢
【问题讨论】:
你用的是什么火花大师??是纱线客户端吗? 【参考方案1】:我曾多次遇到过这个问题。
如果您将 master 设置为 yarn-client,可能是由于资源管理器的停止/重新启动,解释器进程可能仍在运行但 Spark Context(它是一个 Yarn 应用程序)不再存在.
您可以通过咨询资源管理器 Web 界面来检查 Spark Context 是否仍在运行,并检查是否有名为 Zeppelin 的应用程序正在运行。
有时从 Zeppelin 中重新启动解释器进程(解释器选项卡 --> spark --> 重新启动)会解决问题。
其他时候您需要:
从命令行终止 Spark 解释器进程 删除 Spark 解释器 PID 文件 下次开始段落时,它将开始新的火花上下文【讨论】:
感谢您的回答,我会在启动下一个集群时试试这个【参考方案2】:我在 PySpark 中运行多个作业时遇到了同样的问题。似乎在使用 SparkSession 的 Spark 2.0.0 中,当我调用 spark.stop()
SparkSession 时,会调用以下跟踪:
# SparkSession
self._sc.stop()
# SparkContext.stop()
self._jsc = None
然后,当我尝试使用新的 SparkContext 创建新作业时,SparkSession 返回与使用 self.jsc = None
之前相同的 SparkContext。
我解决了在spark.stop()
之后设置SparkSession._instantiatedContext = None
的问题,这会在我下次要求时强制 SparkSession 创建一个新的 SparkContext。
这不是最好的选择,但同时它正在解决我的问题。
【讨论】:
SparkSession 是在 spark 2.0.0 中引入的。【参考方案3】:在运行pyspark
命令时,我注意到这个问题更多,即使单元格执行在运行状态下挂起的微不足道的变量声明也是如此。
正如上面 user1314742 所说,只需杀死相关的PID
就可以为我解决这个问题。
例如:
ps -ef | grep zeppelin
这是重新启动 Spark 解释器和重新启动 zeppelin notebook 并不能解决问题的地方。我猜是因为它无法控制挂起的PID
本身。
【讨论】:
【参考方案4】:您能检查一下您的驱动程序内存是否足够吗?我通过
解决了这个问题-
扩大驱动内存
调整 GC:
--conf spark.cleaner.periodicGC.interval=60
--conf spark.cleaner.referenceTracking.blocking=false
【讨论】:
以上是关于为啥 SparkContext 会随机关闭,如何从 Zeppelin 重新启动?的主要内容,如果未能解决你的问题,请参考以下文章