为啥 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 重新启动?的主要内容,如果未能解决你的问题,请参考以下文章

为啥我托管在 heroku 上的不和谐机器人随机关闭?

为啥要将神经网络的权重初始化为随机数? [关闭]

为啥在 sagemaker 笔记本中导入 SparkContext 库时出现错误?

为啥我的随机数生成器不产生输出? [关闭]

作业 65 取消,因为 SparkContext 已关闭

为啥从 std::vector 中随机删除比 std::list 快?