代码之家  ›  专栏  ›  技术社区  ›  user3407267

如何获取集群信息以调用REST API(从驱动程序中)?

  •  1
  • user3407267  · 技术社区  · 6 年前

    我想使用Spark REST API获取指标并发布到cloud watch。但RESR API类似于:

     val url = "http://<host>:4040/api/v1/applications/<app-name>/stages"
    

    如果我给主主机和应用程序id,它会工作,但我如何在作业中使用它,并动态计算主主机和应用程序名称?有没有办法得到这些信息?

    使用Spark 2.1

    尝试:

    导入组织。阿帕奇。火花sql。火花会话

    val id=火花。sparkContext。应用程序ID val url=火花。sparkContext。uiWebUrl。收到

      case class SparkStage(name: String, shuffleWriteBytes: Long, memoryBytesSpilled: Long, diskBytesSpilled: Long)
    val path = url + "/api/v1/applications/" + id  + "/stages"
    
    implicit val formats = DefaultFormats
    val json = fromURL(path).mkString
    val stages: List[SparkStage] = parse(json).extract[List[SparkStage]]
    

    我得到:

    java.io.IOException: Server returned HTTP response code: 500 for URL: http://112.21.2.151:4040/api/v1/applications/application_1515337161733_0001
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream0(HttpURLConnection.java:1876)
      at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1474)
      at java.net.URL.openStream(URL.java:1045)
      at scala.io.Source$.fromURL(Source.scala:141)
      at scala.io.Source$.fromURL(Source.scala:131)
      ... 64 elided
    
    1 回复  |  直到 6 年前
        1
  •  3
  •   Alper t. Turker    6 年前

    如果您知道主机,则可以查询 applications 端点:

    http://localhost:4040/api/v1/applications
    

    并解析结果以获取应用程序id。

    得到 applicationId host 从应用程序使用各自 SparkContext 方法:

    val spark: SparkSession
    
    spark.sparkContext.applicationId
    spark.sparkContext.uiWebUrl