2015-05-01 52 views
5

我想知道是否有可能提交压井星火应用程序编程到提交显示器 & 杀从其他服务火花应用。从另一个应用程序

我的要求如下:

我写了

  1. 解析用户命令
  2. 服务并将其转化成可以理解的参数已经准备火花SQL应用
  3. 随着参数提交申请,以星火集群使用​​ProcessBuilder
  4. 并计划于群集模式运行生成的应用程序的驱动程序。

其他要求的需要:

  • 查询有关应用状态,例如,比例仍然
  • 查询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

回答

0

你可以从的ProcessBuilder列出的应用程序,然后火纱commnds筛选基于您的应用程序名称可用你,提取应用标识,然后用纱线命令轮询状态/杀死等。

+1

如果我使用独立群集,该怎么办?有没有等效的方法? –

2

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

[email protected]:~$ jps 
20894 Jps 
20704 SparkSubmit 

[email protected]:~$ kill 20704 

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

希望它可以帮助。

2

这是我做的:

  1. 要提交的应用程序,使用(隐藏)星火REST提交API:http://arturmkrtchyan.com/apache-spark-hidden-rest-api

    • 这样,你得到一个DriverID(submissionId下),你可以稍后用来杀死你的工作(你不应该杀死应用程序,特别是如果你在独立模式下使用“监督”)
    • 这个API还可以让你查询驱动程序状态
  2. 使用(也隐藏)UI API的Json应用查询状态:http://[master-node]:[master-ui-port]/json/

    • 该服务公开的JSON格式的主UI提供的所有信息。
  3. 您还可以使用“公共” REST API来查询硕士或执行人申请在每一个工人,但是这不会暴露驱动器(至少不会像星火1.6)

3

你可以使用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

执行许可
+0

这帮了我很多!谢谢 – luckytaxi

0

kill -9 $(jps | grep SparkSubmit | grep -Eo'[0-9] {1,7}')

0

您可以在[spark]/work /中找到驱动程序ID。该id是目录名称。通过spark-submit完成工作。