Zeppelin:如何在Zeppelin中重新启动sparkContext

20

我正在使用 Zeppelin 的隔离模式,它可以在 Spark 集群中为每个笔记本启动一个新的作业。当笔记本执行完成后,我希望能够通过 Zeppelin 来终止该作业。为此我使用了 sc.stop 命令来停止 SparkContext 和作业,但是下一次尝试运行笔记本时,它无法重新启动 sparkContext。那么应该怎么做呢?

4个回答

29

有点反直觉,但你需要访问解释器菜单选项卡而不是直接停止SparkContext

  • 进入解释器列表。

    interpreter list

  • 找到Spark解释器并点击右上角的重新启动

    spark intepreter


8
除了手动重启解释器之外,还有其他方法吗? - eatSleepCode
2
当在EMR上使用SparkZeppelin,并从S3加载外部fat-jar时,我发现仅重启一次解释器是不够的。 假设我之前从S3加载了一个fat-jar,并且它已经升级。 为确保在interpreter中加载新jar,我需要执行以下操作:(1)编辑解释器dependencies并删除现有的jar包,保存更改(2)重新启动解释器(3)再次编辑interpreter dependencies并添加新的jar包(它可以与先前的路径相同),(4)再次重新启动解释器 - y2k-shubham

10
在解释器绑定中(位于右上角的齿轮图标),点击所需解释器左侧的重启图标(在这种情况下,应为Spark解释器)即可重新启动笔记本电脑的解释器。
图片链接:https://istack.dev59.com/MAm7a.webp

7
当我使用Zeppelin和Spark时,我也遇到了同样的问题,并进行了一些调查。经过一段时间,我的第一个结论是:
  • 在段落中使用sc.stop()可以停止SparkContext
  • 只有通过UI(菜单->解释器->Spark解释器->单击restart按钮)才能重新启动SparkContext
然而,既然UI允许通过按按钮来重启Spark解释器,为什么不反向工程化restart按钮的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


在EMR上这对我没用。当通过shell解释器运行curl命令时,我收到了以下错误:curl: (7) Failed to connect to localhost port 8080: Connection refused - conradlee

2
我正在调查Spark在yarn-client模式下停止的问题。我发现这是Spark本身的问题(Spark版本>=1.6)。在Spark客户端模式下,AM通过RPC连接连接到Driver,有两个连接。它设置NettyRpcEndPointRef以连接到服务器'SparkDriver'的驱动程序服务'YarnSchedulerBackEnd',另一个连接是EndPoint 'YarnAM'。
在AM和Driver之间的这些RPC连接中,没有心跳。因此,AM知道Driver是否已连接的唯一方法是在EndPoint 'YarnAM'中的OnDisconnected方法。通过NettyRpcEndPointRef的驱动程序和AM连接的断开消息将通过RPCHandler“postToAll”发送到EndPoint 'YarnAM'。当它们之间的TCP连接断开或保持活动的消息发现TCP不活动(在Linux系统中可能需要2小时),它将标记应用程序为成功。
因此,当Driver监视进程发现yarn应用程序状态更改为SUCCESS时,它将停止sc。
因此,根本原因是,在Spark客户端中,没有重试连接到驱动程序以检查驱动程序是否存活,而只是尽快标记yarn应用程序。也许Spark可以修改这个问题。

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