以编程方式从另一个应用程序提交并终止Spark应用程序

yjs*_*hen 7 apache-spark

我想知道是否可以从其他服务提交,监控终止 spark应用程序.

我的要求如下:

我写了一个服务

  1. 解析用户命令
  2. 它们转换为已经准备好的Spark-SQL应用程序的可理解参数
  3. 使用spark-submitfrom 将应用程序连同参数一起提交给Spark ClusterProcessBuilder
  4. 并计划在集群模式下运行生成的应用程序驱动程序.

其他要求需要:

  • 查询应用程序状态,例如,百分比仍然存在
  • 适当的方式终止查询

我在spark独立文档中找到的建议使用以下命令终止应用程序:

./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID>
Run Code Online (Sandbox Code Playgroud)

而且应该 find the driver ID through the standalone Master web UI at http://<master url>:8080.

那么,我该怎么办?

相关的SO问题:
Spark应用程序完成回调
从Java中的另一个应用程序部署Apache Spark应用程序,最佳实践

pin*_*awn 7

您可以使用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
Run Code Online (Sandbox Code Playgroud)

您将获得如下输出:

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
}
Run Code Online (Sandbox Code Playgroud)

基于此,创建您的kill驱动程序脚本

#!/bin/bash

driverid=`cat output | grep submissionId | grep -Po 'driver-\d+-\d+'`

spark-submit --master spark://node-1:6066 --kill $driverid
Run Code Online (Sandbox Code Playgroud)

确保通过使用给定的脚本执行权限 chmod +x


小智 5

杀死 Spark 应用程序的“肮脏”技巧是杀死名为 SparkSubmit 的 jps。主要问题是该应用程序将被“杀死”,但在火花主日志中它会显示为“已完成”......

user@user:~$ jps  
20894 Jps
20704 SparkSubmit

user@user:~$ kill 20704
Run Code Online (Sandbox Code Playgroud)

老实说,我不喜欢这个解决方案,但现在是我知道杀死应用程序的唯一方法。


uru*_*rug 0

您可以从 processbuilder 中触发纱线命令来列出应用程序,然后根据您可用的应用程序名称进行过滤,提取 appId,然后使用 Yarn 命令轮询状态/终止等。