为什么 SparkContext 会随机关闭,如何从 Zeppelin 重新启动它?

22

我在Zeppelin中编写spark-sql查询,有时候会突然出现以下错误(没有更改过代码):

Cannot call methods on a stopped SparkContext.

然后输出结果在下方继续说道:

The currently active SparkContext was created at:

(No active SparkContext.)

这显然没有意义。这是Zeppelin的一个错误吗?还是我做错了什么?我该如何重新启动SparkContext呢?

谢谢


2
你使用的是哪个Spark主节点?是yarn-client吗? - user1314742
4个回答

23

我曾经遇到过这个问题。

如果您将您的主节点设置为yarn-client,那么可能是由于资源管理器的停止/重启导致解释器进程仍在运行,但Spark Context(作为Yarn应用程序)不再存在。

您可以通过查看资源管理器Web界面并检查是否有名为Zeppelin的应用程序来检查Spark Context是否仍在运行。

有时从Zeppelin内部重新启动解释器进程(解释器选项卡--> spark --> 重新启动)可以解决问题。

其他情况下,您需要执行以下步骤:

  • 从命令行中杀死Spark解释器进程
  • 删除Spark解释器PID文件
  • 下一次开始一个段落时,它将启动新的Spark上下文

谢谢您的回答,我会在启动下一个集群时尝试这个方法。 - The Puma

13

我在运行多个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。

这不是最好的选择,但它暂时解决了我的问题。


SparkSession 在 Spark 2.0.0 中被引入。 - Franzi

0

我注意到在运行pyspark命令时,即使是一些微不足道的变量声明,单元格执行也会停留在运行状态。如用户user1314742所述,只需杀死相关的PID即可解决此问题。

e.g.:

ps -ef | grep zeppelin

当重启Spark解释器和Zeppelin笔记本电脑无法解决问题时,就会出现这种情况。我猜测这是因为它本身无法控制挂起的PID


-1
你能否检查一下你的驱动器内存是否足够? 我通过以下方式解决了这个问题:
  1. 扩大驱动器内存
  2. 调整GC:

    --conf spark.cleaner.periodicGC.interval=60 
    --conf spark.cleaner.referenceTracking.blocking=false
    

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接