【问题标题】:How to get all jobs status through spark REST API?如何通过 spark REST API 获取所有作业状态?
【发布时间】:2020-02-11 23:16:00
【问题描述】:

我正在使用 spark 1.5.1,我想通过 REST API 检索所有作业状态。

我使用/api/v1/applications/{appId} 得到了正确的结果。但是在访问工作 /api/v1/applications/{appId}/jobs 时得到 “no such app:{appID}” 响应。

我应该如何在此处传递应用 ID 以使用 spark REST API 检索应用的作业状态?

【问题讨论】:

  • 我也有同样的问题?你找到解决办法了吗?

标签: rest apache-spark


【解决方案1】:

Spark 提供 4 个隐藏的 RESTFUL API

1) 提交作业 - curl -X POST http://SPARK_MASTER_IP:6066/v1/submissions/create

2) 杀死工作 - curl -X POST http://SPARK_MASTER_IP:6066/v1/submissions/kill/driver-id

3) 检查作业状态 - curl http://SPARK_MASTER_IP:6066/v1/submissions/status/driver-id

4) Spark 集群的状态 - http://SPARK_MASTER_IP:8080/json/

如果你想使用其他 API,你可以试试 Livy , lucidworks 网址 - https://doc.lucidworks.com/fusion/3.0/Spark_ML/Spark-Getting-Started.html

【讨论】:

    【解决方案2】:

    这应该在访问实时驱动程序的 API 端点时起作用,但由于您使用的是 Spark 1.5.x,我认为您遇到了SPARK-10531,这是一个 Spark 驱动程序 UI 错误地混淆了应用程序名称和应用程序 ID。因此,您必须在 REST API url 中使用应用程序名称,例如

    http://localhost:4040/api/v1/applications/Spark%20shell/jobs
    

    根据 JIRA 票证,这只影响 Spark Driver UI;应用程序 ID 应该与 Spark History Server 的 API 端点一起正常工作。

    这在 Spark 1.6.0 中已修复,应该很快就会发布。但是,如果您想要一种适用于所有 Spark 版本的解决方法,那么以下方法应该有效:

    api/v1/applications 端点错误地将作业名称报告为作业 ID,因此您应该能够点击该端点,提取 id 字段(实际上是应用程序名称),然后使用它来构造当前的 URL应用程序的作业列表(请注意,/applications 端点只会在 Spark Driver UI 中返回一个作业,这就是为什么这种方法应该是安全的;由于这个属性,我们不必担心非唯一性应用程序名称)。例如,在 Spark 1.5.2 中,/applications 端点可以返回包含类似记录的响应

    {
       id: "Spark shell",
       name: "Spark shell",
       attempts: [
       {
           startTime: "2015-09-10T06:38:21.528GMT",
           endTime: "1969-12-31T23:59:59.999GMT",
           sparkUser: "",
           completed: false
       }]
    }
    

    如果您使用此id 字段的内容来构建applications/<id>/jobs URL,那么您的代码应该可以防止升级到Spark 1.6.0,因为id 字段将开始报告正确的ID Spark 1.6.0+。

    【讨论】:

    • 感谢您的回答,但它不适用于应用程序名称或应用程序 ID。我跑了localhost:8080/api/v1/applications 并检索了正在运行的应用程序的名称并将其放在那里,但它什么也没返回。
    • 我使用的是 Spark 1.5.0
    • 啊,我注意到您正在使用端口 8080。您是否正在访问 master Web UI 的 API 端点?据我所知,这 不会 一定有效:根据REST API documentation,“JSON 可用于正在运行的应用程序和历史服务器中”。虽然 Master UI 恰好实现/支持几个 API 端点,但我不相信所有 API 端点都通过主 UI 工作。
    • 当我使用端口 8080 即主 web ui 时,我能够获取正在运行或已完成的应用程序。但是当我使用 4040 时,我没有得到任何响应(它说无法连接,不确定是什么问题)。我也尝试从历史服务器获取应用程序,即192.168.223.106:18080/api/v1/applications,但它也给出了空响应。谢谢并原谅我的愚蠢问题。
    • @amit_yo:您的驱动程序 Web UI 是否从端口 4040 开始?您是否使用正确的主机名/IP 来访问它?
    【解决方案3】:

    如果您想使用 REST API 来控制 Spark,您最好将 Spark Jobserver 添加到您的安装中,这样可以为您提供比您当前查询的私有 REST API 更全面的 REST API。

    四处寻找,我已经设法通过运行获得单个应用程序的作业状态

    卷曲http://127.0.0.1:4040/api/v1/applications/Spark%20shell/jobs/

    返回的

    [ {
      "jobId" : 0,
      "name" : "parquet at <console>:19",
      "submissionTime" : "2015-12-21T10:46:02.682GMT",
      "stageIds" : [ 0 ],
      "status" : "RUNNING",
      "numTasks" : 2,
      "numActiveTasks" : 2,
      "numCompletedTasks" : 0,
      "numSkippedTasks" : 0,
      "numFailedTasks" : 0,
      "numActiveStages" : 1,
      "numCompletedStages" : 0,
      "numSkippedStages" : 0,
      "numFailedStages" : 0 }]
    

    【讨论】:

      【解决方案4】:

      对于遇到此问题并在 YARN 上运行的用户:

      根据the docs

      在 YARN 集群模式下运行时,[app-id] 实际上是 [base-app-id]/[attempt-id],其中 [base-app-id] 是 YARN 应用程序 ID

      因此,如果您对 https://HOST:PORT/api/v1/applications/application_12345678_0123 的调用返回类似

      {
        "id" : "application_12345678_0123",
        "name" : "some_name",
        "attempts" : [ {
          "attemptId" : "1",
          <...snip...>
        } ]
      }
      

      你可以得到例如。通过调用工作

      https://HOST:PORT/api/v1/applications/application_12345678_0123/1/jobs
      

      (注意“/jobs”之前的“1”)。

      【讨论】:

      • 如何知道PORT是什么?
      • @huangbiubiu 一般是4040
      【解决方案5】:

      Spark 有一些隐藏的 RESTFUL API,你可以试试。 请注意,我还没有尝试过,但我会的。

      例如:要获取提交申请的状态,您可以执行以下操作: 卷曲http://spark-cluster-ip:6066/v1/submissions/status/driver-20151008145126-0000

      注意:“driver-20151008145126-0000”是 submitsionId。

      您可以通过this post from arturmkrtchyan on GitHub 深入查看此链接

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-01
        • 1970-01-01
        • 1970-01-01
        • 2019-03-09
        • 2016-03-17
        相关资源
        最近更新 更多