【问题标题】:How do you kill a Spark job from the CLI?如何从 CLI 中终止 Spark 作业?
【发布时间】:2020-11-10 21:59:22
【问题描述】:

Killing Spark job using command Prompt

这是我希望能回答我的问题的线程。但是所有四个答案都解释了如何杀死整个应用程序。

如何停止工作?比如计数?

我可以在 Spark Web UI 中通过单击相应作业上的“kill”来执行此操作。我想必须可以列出正在运行的作业并直接通过 CLI 与它们交互。

实际上,我正在使用 Glue 端点上的 PySpark 使用 Notebook。如果我终止应用程序,整个端点都会死掉,我必须启动一个新集群。我只想停止工作。在 Notebook 中取消它只会分离同步并且作业会继续运行,从而阻止执行任何进一步的命令。

【问题讨论】:

    标签: apache-spark


    【解决方案1】:

    Spark 历史服务器提供REST API interface。不幸的是,它只公开了应用程序、作业、阶段等的监控功能。

    还有一个REST Submission interface 提供提交、终止和检查应用程序状态的功能。它是无证的 AFAIK,仅支持 Spark 独立集群和 Mesos 集群,不支持 YARN。 (这就是为什么在 YARN 上的 Spark 的 Jobs UI 屏幕中没有“kill”链接的原因,我猜。)

    因此,您可以尝试使用“隐藏”API,但如果您知道应用程序的 Spark UI URL 和要终止的作业的作业 ID,更简单的方法是:

    $ curl -G http://<Spark-Application-UI-host:port>/jobs/job/kill/?id=<job_id>
    

    由于我不使用 Glue,我很想知道它会如何反应,因为 kill 通常会导致 org.apache.spark.SparkException: Job &lt;job_id&gt; cancelled

    【讨论】:

    • 使用 curl 给我错误curl -G &lt;sparkmaster&gt;/app/kill/?id=&lt;app-id&gt;&amp;terminate=true ==> Error 405 Method Not Allowed
    【解决方案2】:

    列出 linux 中的作业并杀死它。

    我愿意 ps -ef |grep 火花提交 如果它是使用 spark-submit 开始的。从输出中获取 PID,然后 杀 -9

    【讨论】:

      【解决方案3】:

      基于mazaneicha 的答案,对于standalone 模式下的Spark 2.4.6,对于在client 模式下提交的作业,curl 请求终止具有已知应用程序ID 的应用程序是

      curl -d "id=<your_appID>&terminate=true" -X POST <your_spark_master_url>/app/kill/
      

      我们遇到了类似的问题,即人们没有将笔记本与集群断开连接,从而占用资源。

      我们通过解析 webUI 得到正在运行的应用程序列表。我很确定管理 Spark 集群的方法不会那么痛苦..

      【讨论】:

        【解决方案4】:

        杀死正在运行的作业:

        1. 打开Spark 应用程序用户界面。
        2. 转到jobs 选项卡。
        3. running jobs 中找到job
        4. 点击kill链接并确认。

        【讨论】:

        • 我明确声明我知道这个选项并且我想使用 CLI。
        猜你喜欢
        • 2020-03-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多