我正在创建一个将从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
答案 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脚本。