如何知道应用程序是否处于RUNNING状态以杀死spark-submit进程?

时间:2016-08-10 22:53:07

标签: apache-spark

我正在创建一个将从Jenkins执行的shell脚本,因为我们有很多流式工作,而Jenkins的经理似乎更容易。所以我创建了以下脚本。

#!/bin/bash
spark-submit "spark parameters here" > /dev/null 2>&1 &
processId=$!
echo $processId
sleep 5m
kill $processId

如果我没有睡觉,火花提交过程会立即被杀死,并且不会提交任何火花申请。如果有睡眠,火花提交过程会有足够的时间提交火花应用程序。

我的问题是,有没有更好的方法来了解spark应用程序是否处于RUNNING状态,以便可以杀死spark-submit进程?

Spark 1.6.0 with YARN

2 个答案:

答案 0 :(得分:1)

您应该spark-submit您的Spark应用程序并使用application部分中描述的yarn application -status <ApplicationId>

  

打印应用程序的状态。

您可以从<ApplicationId>spark-submit部署模式)的日志中获取client或使用yarn application -list -appType SPARK -appStates RUNNING

答案 1 :(得分:0)

我不知道您正在使用什么Spark版本,或者您是否在独立模式下运行,但无论如何,您可以使用the REST API来提交/终止您的应用。我最后一次检查它几乎没有记录,但它工作正常。

当您提交申请时,您将获得一个submissionId,您可以在以后使用它来获取当前状态或将其删除。可能的状态记录在here

  // SUBMITTED: Submitted but not yet scheduled on a worker
  // RUNNING: Has been allocated to a worker to run
  // FINISHED: Previously ran and exited cleanly
  // RELAUNCHING: Exited non-zero or due to worker failure, but has not yet started running again
  // UNKNOWN: The state of the driver is temporarily not known due to master failure recovery
  // KILLED: A user manually killed this driver
  // FAILED: The driver exited non-zero and was not supervised
  // ERROR: Unable to run or restart due to an unrecoverable error (e.g. missing jar file)

这对于长时间运行的应用(例如流媒体)特别有用,因为您不必照看shell脚本。