为什么 SparkContext 随机关闭,如何从 Zeppelin 重新启动它?
Why does SparkContext randomly close, and how do you restart it from Zeppelin?
我正在使用 Zeppelin 编写 spark-sql 查询,有时我突然开始收到此错误(在未更改代码之后):
Cannot call methods on a stopped SparkContext.
然后输出进一步说:
The currently active SparkContext was created at:
(No active SparkContext.)
这显然没有意义。这是齐柏林飞艇的错误吗?还是我做错了什么?如何重新启动 SparkContext?
谢谢
这个问题我遇到过几次。
如果您将 master 设置为 yarn-client,可能是由于 Resource Manager 停止/重启,解释器进程可能仍然 运行 但 Spark Context(这是一个 Yarn 应用程序) ) 不再存在。
您可以通过查看您的资源管理器 Web 界面检查 Spark 上下文是否仍然 运行,并检查是否有名为 Zeppelin 的应用程序 运行。
有时从 Zeppelin 中重新启动解释器进程(解释器选项卡 --> spark --> 重启)将解决问题。
其他时候您需要:
- 从命令行终止 Spark 解释器进程
- 删除 Spark 解释器 PID 文件
- 下次您开始一个段落时,它将启动新的 spark 上下文
我在 PySpark 中面临同样的问题 运行 多个作业。似乎在 Spark 2.0.0 中,使用 SparkSession,当我调用 spark.stop()
时,SparkSession 调用以下跟踪:
# SparkSession
self._sc.stop()
# SparkContext.stop()
self._jsc = None
然后,当我尝试使用新的 SparkContext 创建新作业时,SparkSession return 与之前 self.jsc = None
相同的 SparkContext。
我在 spark.stop()
之后解决了设置 SparkSession._instantiatedContext = None
强制 SparkSession 在我下次需要时创建 new SparkContext。
这不是最好的选择,但同时它解决了我的问题。
请问您的驱动内存是否足够?我通过
解决了这个问题
- 加大驱动内存
调整 GC:
--conf spark.cleaner.periodicGC.interval=60
--conf spark.cleaner.referenceTracking.blocking=false
当 运行 pyspark
命令时,我注意到这个问题更多,即使使用单元格执行挂起在 运行 状态的微不足道的变量声明。
正如 user1314742 上面提到的,只需杀死相关的 PID
就可以为我解决这个问题。
例如:
ps -ef | grep zeppelin
这是重启Spark解释器和重启zeppelin notebook都不能解决问题的地方。我猜是因为它无法控制挂起的 PID
本身。
我正在使用 Zeppelin 编写 spark-sql 查询,有时我突然开始收到此错误(在未更改代码之后):
Cannot call methods on a stopped SparkContext.
然后输出进一步说:
The currently active SparkContext was created at:
(No active SparkContext.)
这显然没有意义。这是齐柏林飞艇的错误吗?还是我做错了什么?如何重新启动 SparkContext?
谢谢
这个问题我遇到过几次。
如果您将 master 设置为 yarn-client,可能是由于 Resource Manager 停止/重启,解释器进程可能仍然 运行 但 Spark Context(这是一个 Yarn 应用程序) ) 不再存在。
您可以通过查看您的资源管理器 Web 界面检查 Spark 上下文是否仍然 运行,并检查是否有名为 Zeppelin 的应用程序 运行。
有时从 Zeppelin 中重新启动解释器进程(解释器选项卡 --> spark --> 重启)将解决问题。
其他时候您需要:
- 从命令行终止 Spark 解释器进程
- 删除 Spark 解释器 PID 文件
- 下次您开始一个段落时,它将启动新的 spark 上下文
我在 PySpark 中面临同样的问题 运行 多个作业。似乎在 Spark 2.0.0 中,使用 SparkSession,当我调用 spark.stop()
时,SparkSession 调用以下跟踪:
# SparkSession
self._sc.stop()
# SparkContext.stop()
self._jsc = None
然后,当我尝试使用新的 SparkContext 创建新作业时,SparkSession return 与之前 self.jsc = None
相同的 SparkContext。
我在 spark.stop()
之后解决了设置 SparkSession._instantiatedContext = None
强制 SparkSession 在我下次需要时创建 new SparkContext。
这不是最好的选择,但同时它解决了我的问题。
请问您的驱动内存是否足够?我通过
解决了这个问题- 加大驱动内存
调整 GC:
--conf spark.cleaner.periodicGC.interval=60 --conf spark.cleaner.referenceTracking.blocking=false
当 运行 pyspark
命令时,我注意到这个问题更多,即使使用单元格执行挂起在 运行 状态的微不足道的变量声明。
正如 user1314742 上面提到的,只需杀死相关的 PID
就可以为我解决这个问题。
例如:
ps -ef | grep zeppelin
这是重启Spark解释器和重启zeppelin notebook都不能解决问题的地方。我猜是因为它无法控制挂起的 PID
本身。