【问题标题】:How to kill apache spark application running in background after killing it from SPARK web UI如何从 SPARK Web UI 中杀死后台运行的 apache spark 应用程序
【发布时间】:2019-06-20 10:13:26
【问题描述】:

当我使用以下代码提交时,成功创建了火花上下文 spark submit 运行良好。

当我从 Apache spark 杀死 Running Applications 下的应用程序时 web UI,应用程序状态显示killed,但是,杀死后在屏幕上打印Test application

在 apache spark web UI 上运行的应用程序:

使用 spark web UI 上的“kill”按钮杀死应用程序

杀死应用程序后仍然在屏幕上打印消息

需要在我杀死 spark-context 时自动杀死 python 作业的解决方案

from pyspark import SparkConf
from pyspark import SparkContext

if __name__ == "__main__":
    conf = SparkConf().setAppName("TEST")
    conf.set("spark.scheduler.mode", "FAIR")
    sc = SparkContext(conf=conf)

    while True:
        print("Test application")

【问题讨论】:

  • 您是否在 Yarn 上运行 Spark 应用程序。如果是,则使用命令“Yarn application -kill 从 Yarn 中将其杀死
  • 通过命令编辑器spark-submit test_spark.py手动提交,我可以在同一个命令编辑器上看到打印输出。

标签: python apache-spark sigkill


【解决方案1】:

你可以用老式的方法来做。

运行 ps -ef 并找到 java 作业 ID。然后运行 ​​kill -9

//Find all the java jobs
[stack_overflow@stack_overflow ~]$ ps -ef | grep SparkSubmit
stack_overflow  96747  96736 99 11:19 pts/15   00:01:55 /usr/bin/java -cp /opt/spark/conf/:/opt/spark/jars/* -Dscala.usejavacp=true -Xmx1g -Dderby.system.home=/home/stack_overflow/Spark/ org.apache.spark.deploy.SparkSubmit --conf spark.local.dir=/opt/spark/temp_land/spark-temp --conf spark.driver.extraJavaOptions=-Dderby.system.home=/home/stack_overflow/ --class org.apache.spark.repl.Main --name Spark shell spark-shell
stack_overflow  97410  14952  0 11:20 pts/15   00:00:00 grep --color=auto SparkSubmit
//96747 is the Spark job I forced to become unresponsive
//97410 is the Base Spark Account don't delete
////Run the kill command on the job, only works if you have permissions on that job
[stack_overflow@stack_overflow ~]$ kill -9 96747
//The job is now dead and gone
[stack_overflow@stack_overflow ~]$ ps -ef | grep SparkSubmit
stack_overflow  96190  14952  0 11:17 pts/15   00:00:00 grep --color=auto SparkSubmit

【讨论】:

  • 感谢您的回复。我可以在python程序中处理吗?原因:在生产中,我可以提交多个 spark 作业,每个作业都包含单独的 sparkcontext。我期待如果我在 spark UI 上终止 spark 上下文会话,它应该会终止整个应用程序的执行。
  • 假设我启动了 10 个 Spark 作业,每个都有自己的 SparkContext,那么它们应该都有自己的 PID 或 Job_ID 来杀死。对于您的问题,不,您可以直接从 Spark 中杀死(有时工作会异常),因为您已经看到并且不会死。但是,如果您有兴趣,您可以设置一个观察者来杀死命令。 (1)从高层获取一个程序来监视一个文件夹,每 2 秒检查一次并休眠,(2)当你让你的 SparkContext 给它一个唯一的 App_Name 时,(3)当你想要它被杀死时使用 java.lang. file.io 在文件夹中放置一个名为 App Name 的文件。
  • watcher 解析 App_Name 在上面的 grep 中使用它,识别 pid,并杀死它。抱歉,在 Spark 中动态终止这些作业确实没有简单的方法。
  • 感谢您的详细信息。下面我发布了对我有用的代码。
【解决方案2】:

您可以打开另一个会话并查看您的 spark 应用程序是否仍在运行 -

yarn application -list <app_id>

如果仍在运行,则终止您的应用程序,

yarn application -kill <app_id>

【讨论】:

  • 阿杰感谢您的回复。我这里没有使用 yarn 异常是以编程方式处理
  • 我不确定,但您可以尝试使用关闭挂钩来正常关闭应用程序。祝你好运。
【解决方案3】:

我找到了用下面的代码解决我的问题的方法。感谢您的所有回复

from pyspark import SparkConf
from pyspark import SparkContext

if __name__ == "__main__":
    conf = SparkConf().setAppName("TEST")
    conf.set("spark.scheduler.mode", "FAIR")
    sc = SparkContext(conf=conf)

    while True:
        if sc._jsc.sc().isStopped():
            break
        print("Test application")

【讨论】:

    猜你喜欢
    • 2019-02-24
    • 2015-06-16
    • 2017-04-16
    • 2020-07-28
    • 1970-01-01
    • 2021-10-15
    • 1970-01-01
    • 1970-01-01
    • 2018-03-08
    相关资源
    最近更新 更多