【发布时间】:2020-07-31 23:52:38
【问题描述】:
我看到一个奇怪的问题。我有一个独立模式的火花集群。我从终端提交来自远程节点的火花作业,如下所示
$> spark-submit --master spark://10.1.40.18:7077 --class com.test.Ping spark-jobs.jar
当应用程序运行时,当我在控制台终端上按 ctrl-C 时,进程被终止,火花主 UI 中的应用程序也是如此。当我去 spark master ui 时,我看到这个应用程序在 Completed applications 下处于 Killed 状态,这是我期望看到的。
现在,我创建了一个如下的 shell 脚本来做同样的事情
#!/bin/bash
spark-submit --master spark://10.1.40.18:7077 --class com.test.Ping spark-jobs.jar &
echo $! > my.pid
当我从终端执行shell脚本时,如下
$> bash myscript.sh
应用程序已正确提交给 spark master,我可以将其视为 spark master UI 中正在运行的应用程序之一。但是当我按如下方式在终端中终止进程时
$> ps kill $(cat my.pid)
我看到该进程在我的机器上被终止,但 spark 应用程序仍在 spark master 中运行!它不会被杀死。
我注意到另一件事,当我通过 shell 脚本启动 spark 作业并通过单击正在运行的应用程序旁边的“kill”从 spark master UI 终止应用程序时,它在 spark ui 中被终止,但我仍然看到在我的机器上运行的进程。
在这两种情况下,我都希望远程 spark 应用程序被终止,而我的本地进程也被终止。
为什么会这样?以及如何从通过 shell 脚本启动的终端终止 spark 应用程序,而无需进入 spark 主 UI?
我想通过脚本启动 spark 应用程序并记录 pid,以便我可以远程监控它
感谢您的帮助
【问题讨论】:
-
您正在后台运行 spark-submit(即 spark-submit 命令末尾的 &)。这将 spark 提交程序与您的 shell 脚本分离。要终止程序,您可以执行类似“ps ax | grep spark-jobs.jar | awk 'print $1' | read spark_submit_pid; kill spark_submit_pid”之类的操作。基本上列出进程,使用您的 spark 应用程序找到一个,打印第一列 (pid),使用 pid 终止。
标签: linux bash apache-spark