如何杀死 运行 Spark 应用程序?

How to kill a running Spark application?

我有一个 运行 Spark 应用程序,它占用了我的其他应用程序不会分配任何资源的所有内核。

我做了一些快速研究,人们建议使用 YARN kill 或 /bin/spark-class 来终止命令。但是,我使用的是 CDH 版本,/bin/spark-class 根本不存在,YARN kill 应用程序也不起作用。

谁能帮我解决这个问题?

  • 复制粘贴来自 spark 调度程序的应用程序 ID,例如 application_1428487296152_25597
  • 连接到已启动作业的服务器
  • yarn application -kill application_1428487296152_25597

https://hadoop.apache.org/docs/stable/hadoop-yarn/hadoop-yarn-site/ResourceManagerRest.html#Cluster_Application_State_API

PUT http://{rm http address:port}/ws/v1/cluster/apps/{appid}/state

{
  "state":"KILLED"
}

从 YARN 中获取所有应用程序 ID 并将它们一一杀死可能很耗时。您可以使用 Bash for 循环来快速高效地完成此重复性任务,如下所示:

终止 YARN 上所有处于已接受状态的应用程序:

for x in $(yarn application -list -appStates ACCEPTED | awk 'NR > 2 { print }'); do yarn application -kill $x; done

杀死 YARN 上所有处于 运行 状态的应用程序:

for x in $(yarn application -list -appStates RUNNING | awk 'NR > 2 { print }'); do yarn application -kill $x; done

这可能不是一个合乎道德和首选的解决方案,但它在您无法访问控制台以使用 yarn application 命令终止作业的环境中有所帮助。

步骤是

转到 spark 作业的应用程序母版页。 单击作业部分。 单击活动作业的活动阶段。 您会在活动阶段旁边看到 "kill" 按钮。

如果后续阶段依赖于当前 运行 阶段,则此方法有效。虽然它将工作标记为“被用户杀死”

首次使用:

yarn application -list

记下应用程序 ID 然后杀死使用:

yarn application -kill application_id