我正在使用 Zeppelin 的隔离模式,它可以在 Spark 集群中为每个笔记本启动一个新的作业。当笔记本执行完成后,我希望能够通过 Zeppelin 来终止该作业。为此我使用了 sc.stop
命令来停止 SparkContext 和作业,但是下一次尝试运行笔记本时,它无法重新启动 sparkContext
。那么应该怎么做呢?
我正在使用 Zeppelin 的隔离模式,它可以在 Spark 集群中为每个笔记本启动一个新的作业。当笔记本执行完成后,我希望能够通过 Zeppelin 来终止该作业。为此我使用了 sc.stop
命令来停止 SparkContext 和作业,但是下一次尝试运行笔记本时,它无法重新启动 sparkContext
。那么应该怎么做呢?
sc.stop()
可以停止SparkContextrestart
按钮)才能重新启动SparkContextrestart
按钮的API调用呢!结果是,restarting
Spark解释器会发送以下HTTP请求:PUT http://localhost:8080/api/interpreter/setting/restart/spark
幸运的是,Zeppelin有能力与多个解释器一起工作,其中一个解释器也是shell
解释器。因此,我创建了两个段落:
第一个段落是为了在需要时停止SparkContext:
%spark
// stop SparkContext
sc.stop()
第二段是关于如何通过编程方式重新启动SparkContext:
%sh
# restart SparkContext
curl -X PUT http://localhost:8080/api/interpreter/setting/restart/spark
在使用这两段代码停止和重启SparkContext之后,我再次运行了另一段代码来检查是否重启成功......结果是成功的!因此,虽然这不是一个官方解决方案,更多的是一个变通方法,但它仍然是合法的,因为我们所做的就是在一个段落中“按下”重新启动
按钮!
Zeppelin版本:0.8.1
curl: (7) Failed to connect to localhost port 8080: Connection refused
。 - conradlee
EMR
上使用Spark
和Zeppelin
,并从S3
加载外部fat-jar
时,我发现仅重启一次解释器是不够的。 假设我之前从S3
加载了一个fat-jar,并且它已经升级。 为确保在interpreter
中加载新jar,我需要执行以下操作:(1)编辑解释器dependencies
并删除现有的jar包,保存更改(2)重新启动解释器(3)再次编辑interpreter dependencies并添加新的jar包(它可以与先前的路径相同),(4)再次重新启动解释器 - y2k-shubham