我在Zeppelin中编写spark-sql查询,有时候会突然出现以下错误(没有更改过代码):
Cannot call methods on a stopped SparkContext.
然后输出结果在下方继续说道:
The currently active SparkContext was created at:
(No active SparkContext.)
这显然没有意义。这是Zeppelin的一个错误吗?还是我做错了什么?我该如何重新启动SparkContext呢?
谢谢
我在Zeppelin中编写spark-sql查询,有时候会突然出现以下错误(没有更改过代码):
Cannot call methods on a stopped SparkContext.
然后输出结果在下方继续说道:
The currently active SparkContext was created at:
(No active SparkContext.)
这显然没有意义。这是Zeppelin的一个错误吗?还是我做错了什么?我该如何重新启动SparkContext呢?
谢谢
我曾经遇到过这个问题。
如果您将您的主节点设置为yarn-client,那么可能是由于资源管理器的停止/重启导致解释器进程仍在运行,但Spark Context(作为Yarn应用程序)不再存在。
您可以通过查看资源管理器Web界面并检查是否有名为Zeppelin的应用程序来检查Spark Context是否仍在运行。
有时从Zeppelin内部重新启动解释器进程(解释器选项卡--> spark --> 重新启动)可以解决问题。
其他情况下,您需要执行以下步骤:
我在运行多个PySpark作业时遇到了相同的问题。似乎在Spark 2.0.0中,使用SparkSession,当我调用spark.stop()
时,SparkSession会调用以下跟踪:
# SparkSession
self._sc.stop()
# SparkContext.stop()
self._jsc = None
然后,当我尝试使用新的SparkContext创建一个新作业时,SparkSession返回与之前相同的SparkContext,并带有self.jsc = None
。
我解决了这个问题,通过在spark.stop()
之后设置SparkSession._instantiatedContext = None
,强制SparkSession在下一次需要时创建一个新的 SparkContext。
这不是最好的选择,但它暂时解决了我的问题。
我注意到在运行pyspark
命令时,即使是一些微不足道的变量声明,单元格执行也会停留在运行状态。如用户user1314742所述,只需杀死相关的PID
即可解决此问题。
e.g.:
ps -ef | grep zeppelin
当重启Spark解释器和Zeppelin笔记本电脑无法解决问题时,就会出现这种情况。我猜测这是因为它本身无法控制挂起的PID
。
调整GC:
--conf spark.cleaner.periodicGC.interval=60
--conf spark.cleaner.referenceTracking.blocking=false