从另一个应用程序
我想知道是否有可能提交压井星火应用程序编程到提交,显示器 & 杀从其他服务火花应用。从另一个应用程序
我的要求如下:
我写了
- 解析用户命令
- 服务并将其转化成可以理解的参数到已经准备火花SQL应用
- 随着参数提交申请,以星火集群使用从
ProcessBuilder
- 并计划于群集模式运行生成的应用程序的驱动程序。
其他要求的需要:
- 查询有关应用状态,例如,比例仍然
- 杀查询accrodingly
我发现了什么的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
你可以从的ProcessBuilder列出的应用程序,然后火纱commnds筛选基于您的应用程序名称可用你,提取应用标识,然后用纱线命令轮询状态/杀死等。
杀死spark应用的“肮脏”技巧是杀死名为SparkSubmit的jps。主要的问题是,应用程序将被“封杀”,但在火花主记录它会显示为“已完成” ...
[email protected]:~$ jps
20894 Jps
20704 SparkSubmit
[email protected]:~$ kill 20704
说实话,我不喜欢这样的解决方案,但现在是唯一的我知道杀死一个应用程序的方式。
希望它可以帮助。
这是我做的:
-
要提交的应用程序,使用(隐藏)星火REST提交API:http://arturmkrtchyan.com/apache-spark-hidden-rest-api
- 这样,你得到一个DriverID(submissionId下),你可以稍后用来杀死你的工作(你不应该杀死应用程序,特别是如果你在独立模式下使用“监督”)
- 这个API还可以让你查询驱动程序状态 种
-
使用(也隐藏)UI API的Json应用查询状态:http://[master-node]:[master-ui-port]/json/
- 该服务公开的JSON格式的主UI提供的所有信息。
您还可以使用“公共” REST API来查询硕士或执行人申请在每一个工人,但是这不会暴露驱动器(至少不会像星火1.6)
你可以使用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
}
并以此为基础,创建你杀驱动脚本
#!/bin/bash
driverid=`cat output | grep submissionId | grep -Po 'driver-\d+-\d+'`
spark-submit --master spark://node-1:6066 --kill $driverid
确保给定该脚本通过使用chmod +x
这帮了我很多!谢谢 – luckytaxi
kill -9 $(jps | grep SparkSubmit | grep -Eo'[0-9] {1,7}')
您可以在[spark]/work /中找到驱动程序ID。该id是目录名称。通过spark-submit完成工作。
如果我使用独立群集,该怎么办?有没有等效的方法? –