以编程方式终止 Spark 作业

Posted

技术标签:

【中文标题】以编程方式终止 Spark 作业【英文标题】:Kill Spark Job programmatically 【发布时间】:2017-04-05 16:05:51 【问题描述】:

我正在通过 Jupyter notebook 运行 pyspark 应用程序。我可以使用 Spark Web UI 终止作业,但我想以编程方式终止它。

我怎样才能杀死它???

【问题讨论】:

【参考方案1】:

要扩展@Netanel Malka 的答案,您可以使用 cancelAllJobs 方法取消每个正在运行的作业,或者可以使用 cancelJobGroup 方法取消已组织成组的作业。

来自 PySpark 文档:

cancelAllJobs()
Cancel all jobs that have been scheduled or are running.

cancelJobGroup(groupId)
Cancel active jobs for the specified group. See SparkContext.setJobGroup for more information.

还有来自文档的示例:

import threading
from time import sleep
result = "Not Set"
lock = threading.Lock()

def map_func(x):
    sleep(100)
    raise Exception("Task should have been cancelled")

def start_job(x):
    global result
    try:
        sc.setJobGroup("job_to_cancel", "some description")
        result = sc.parallelize(range(x)).map(map_func).collect()
    except Exception as e:
        result = "Cancelled"
    lock.release()

def stop_job():
    sleep(5)
    sc.cancelJobGroup("job_to_cancel")

suppress = lock.acquire()
suppress = threading.Thread(target=start_job, args=(10,)).start()
suppress = threading.Thread(target=stop_job).start()
suppress = lock.acquire()
print(result)

【讨论】:

【参考方案2】:

假设你写了这段代码:

from pyspark import SparkContext

sc = SparkContext("local", "Simple App")

# This will stop your app
sc.stop()

如文档中所述: http://spark.apache.org/docs/latest/api/python/pyspark.html?highlight=stop#pyspark.SparkContext.stop

【讨论】:

这不会创建一个新的、独立的 SparkContext 吗? 没有。如果您将在您的应用程序中调用 sc.stop(),SparkContext 将被停止。我添加 SparkContext 的 init 以明确 sc @cricket_007 它将杀死该 Spark 应用程序中的所有作业。我只想杀死一个特定的工作。

以上是关于以编程方式终止 Spark 作业的主要内容,如果未能解决你的问题,请参考以下文章

在配置时间后以编程方式终止订阅中的 PubSubIO.readMessages?

Spark:作业重启和重试

使用 REST 触发 Spark 作业

以编程方式识别何时创建或终止微服务的新实例?

132、Spark核心编程进阶之yarn模式下日志查看

Spark核心编程进阶-yarn模式下日志查看详解