我想知道是否可以从其他服务提交,监控和终止spark应用程序。
我的要求如下:
我写了一个服务
spark-submit
的ProcessBuilder
将应用程序连同参数一起提交给Spark Cluster其他要求需要:
我在spark standalone documentation中发现的建议使用以下方法杀死应用程序:
./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID>
并且应该find the driver ID through the standalone Master web UI at http://<master url>:8080.
那么,我该怎么办?
相关的SO问题: Spark application finished callback Deploy Apache Spark application from another application in Java, best practice
您可以使用shell脚本来执行此操作。
部署脚本:
#!/bin/bash
spark-submit --class "xx.xx.xx" \
--deploy-mode cluster \
--supervise \
--executor-memory 6G hdfs:///spark-stat.jar > output 2>&1
cat output
你会得到这样的输出:
16/06/23 08:37:21 INFO rest.RestSubmissionClient: Submitting a request to launch an application in spark://node-1:6066.
16/06/23 08:37:22 INFO rest.RestSubmissionClient: Submission successfully created as driver-20160623083722-0026. Polling submission state...
16/06/23 08:37:22 INFO rest.RestSubmissionClient: Submitting a request for the status of submission driver-20160623083722-0026 in spark://node-1:6066.
16/06/23 08:37:22 INFO rest.RestSubmissionClient: State of driver driver-20160623083722-0026 is now RUNNING.
16/06/23 08:37:22 INFO rest.RestSubmissionClient: Driver is running on worker worker-20160621162532-192.168.1.200-7078 at 192.168.1.200:7078.
16/06/23 08:37:22 INFO rest.RestSubmissionClient: Server responded with CreateSubmissionResponse:
{
"action" : "CreateSubmissionResponse",
"message" : "Driver successfully submitted as driver-20160623083722-0026",
"serverSparkVersion" : "1.6.0",
"submissionId" : "driver-20160623083722-0026",
"success" : true
}
在此基础上,创建您的kill驱动程序脚本
#!/bin/bash
driverid=`cat output | grep submissionId | grep -Po 'driver-\d+-\d+'`
spark-submit --master spark://node-1:6066 --kill $driverid
通过使用chmod +x
确保给出脚本执行权限
杀死火花应用程序的“肮脏”技巧是杀死名为SparkSubmit的jps。主要问题是该应用程序将被“杀死”但在spark master日志中它将显示为“已完成”...
user@user:~$ jps
20894 Jps
20704 SparkSubmit
user@user:~$ kill 20704
说实话,我不喜欢这个解决方案,但现在是我知道杀死一个应用程序的唯一方法。
希望它可以帮助。
这是我做的:
您可以从processbuilder中发出纱线提交来列出应用程序,然后根据您可用的应用程序名称进行过滤,提取appId然后使用Yarn命令轮询状态/ kill等。
kill -9 $(jsp | grep SparkSubmit | grep -Eo'[0-9] {1,7}')
您可以在[spark] / work /中找到驱动程序ID。 id是目录名称。通过spark-submit杀死这份工作。