我正在尝试在群集中使用隐藏的REST Api触发spark作业。我能够触发火花作业,但它会一次又一次地执行,除非我明确地杀了它。
我的请求如下所示
curl -X POST http://sparkmaster:6066/v1/submissions/create --header "Content-Type:application/json;charset=UTF-8" --data '{
"action" : "CreateSubmissionRequest",
"appArgs" : ["10"],
"appResource" : "file:/path/to/myapp.jar",
"clientSparkVersion" : "1.6.1",
"environmentVariables" : {
"SPARK_ENV_LOADED" : "1"
},
"mainClass" : "com.brevitaz.app.Main",
"sparkProperties" : {
"spark.jars" : "file:/path/to/myapp.jar",
"spark.driver.supervise" : "true",
"spark.app.name" : "MySparkJob",
"spark.eventLog.enabled": "true",
"spark.submit.deployMode" : "client",
"spark.master" : "spark://sparkmaster:6066"
}
}'
响应
{
"action" : "CreateSubmissionResponse",
"message" : "Driver successfully submitted as driver-20170524105859-0022",
"serverSparkVersion" : "1.6.1",
"submissionId" : "driver-20170524105859-0022",
"success" : true
}
我希望提交作业并执行一次。有没有办法在火花中实现同样的目标?
我也有其他方式来触发火花工作。我只需要从基于scala的Web应用程序中触发执行spark job。
答案 0 :(得分:0)
您已指定" spark.driver.supervise" :" true"在你的API调用中,这似乎导致应用程序每次以非零返回码退出时再次启动。
请参阅官方spark的官方文档。
http://spark.apache.org/docs/latest/spark-standalone.html
此外,独立群集模式支持重新启动您的 如果退出时使用非零退出代码,则自动应用。使用 此功能,您可以将--supervise标志传递给spark-submit 在启动您的申请时。
请尝试将监督标志设置为false。希望这会有所帮助。