如何通过spark-submit获取spark SUBMISSION_ID?

时间:2019-03-13 06:55:09

标签: apache-spark

许多地方都需要SUBMISSION_ID,例如spark-submit --status和Spark REST API。但是,当我使用SUBMISSION_ID命令提交Spark作业时,如何获得此spark-submit

P.S。

我使用python [popen][2]启动了spark-submit作业。我需要SUBMISSION_ID,以便我的python程序可以通过REST API监视火花作业状态:<ip>:6066/v1/submissions/status/<SUBMISSION_ID>

1 个答案:

答案 0 :(得分:0)

感谢@Pandey提供的线索。答案https://stackoverflow.com/a/37980813/5634636对我有很大帮助。

TL; DR

详细说明

  

注意:我仅在Apache Spark 2.3.1上测试我的方法。我不能保证它也可以在其他版本中使用。

首先让我明确我的要求。我想要3个功能:

  1. 远程提交火花作业
  2. 随时检查作业状态(运行,错误,完成...)
  3. 如果出现错误,则获取错误消息

本地提交

  

注意:此答案仅在 集群 模式下起作用

Spark工具spark-submit会有所帮助。

远程提交

建议使用Spark提交API。 Apache Spark官方网站上似乎没有任何文档,所以有人将其称为 hidden API 。有关详细信息,请参见:https://www.nitendragautam.com/spark/submit-apache-spark-job-with-rest-api/

  • 要提交Spark作业,请使用Submit API
  • 要获取作业的状态,请使用状态API:http://<master-ip>:6066/v1/submissions/status/<submission-id>。提交作业时,submission-id将以json格式返回。
  • 该错误消息包含在状态消息中。
  • 有关错误消息的更多信息:请注意状态 ERROR FAILED 之间的区别。简而言之,FAILED表示执行 Spark作业时出错(例如,未捕获的异常),而ERROR表示提交时出错(例如,无效的jar路径) 。错误消息包含在状态json中。如果要查看失败原因,可以通过http://<driver-ip>:<ui-port>/log/<submission-id>进行访问。

这里是错误状态的一个示例(****是一个有意写错的不正确的jar路径):

{
  "action" : "SubmissionStatusResponse",
  "driverState" : "ERROR",
  "message" : "Exception from the cluster:\njava.io.FileNotFoundException: File hdfs:**** does not exist.\n\torg.apache.hadoop.hdfs.DistributedFileSystem.listStatusInternal(DistributedFileSystem.java:795)\n\torg.apache.hadoop.hdfs.DistributedFileSystem.access$700(DistributedFileSystem.java:106)\n\torg.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:853)\n\torg.apache.hadoop.hdfs.DistributedFileSystem$18.doCall(DistributedFileSystem.java:849)\n\torg.apache.hadoop.fs.FileSystemLinkResolver.resolve(FileSystemLinkResolver.java:81)\n\torg.apache.hadoop.hdfs.DistributedFileSystem.listStatus(DistributedFileSystem.java:860)\n\torg.apache.spark.util.Utils$.fetchHcfsFile(Utils.scala:727)\n\torg.apache.spark.util.Utils$.doFetchFile(Utils.scala:695)\n\torg.apache.spark.util.Utils$.fetchFile(Utils.scala:488)\n\torg.apache.spark.deploy.worker.DriverRunner.downloadUserJar(DriverRunner.scala:155)\n\torg.apache.spark.deploy.worker.DriverRunner.prepareAndRunDriver(DriverRunner.scala:173)\n\torg.apache.spark.deploy.worker.DriverRunner$$anon$1.run(DriverRunner.scala:92)",
  "serverSparkVersion" : "2.3.1",
  "submissionId" : "driver-20190315160943-0005",
  "success" : true,
  "workerHostPort" : "172.18.0.4:36962",
  "workerId" : "worker-20190306214522-172.18.0.4-36962"
}