【问题标题】:How to fetch Spark Streaming job statistics using REST calls when running in yarn-cluster mode在纱线集群模式下运行时如何使用 REST 调用获取 Spark Streaming 作业统计信息
【发布时间】:2017-07-04 20:48:22
【问题描述】:

我有一个 Spark streaming 程序以“yarn-cluster”模式在 Yarn Cluster 上运行。 (-master yarn-cluster)。 我想使用 json 格式的 REST API 获取 Spark 作业统计信息。 我能够使用 REST url 调用获取基本统计信息: http://yarn-cluster:8088/proxy/application_1446697245218_0091/metrics/json。但这只是给出了非常基本的统计数据。

但是我想获取每个执行程序或每个基于 RDD 的统计信息。 如何使用 REST 调用来做到这一点,以及在哪里可以找到准确的 REST url 以获取这些统计信息。 虽然 $SPARK_HOME/conf/metrics.properties 文件揭示了一些关于 url 的信息,即

5. MetricsServlet is added by default as a sink in master, worker and client driver, you can send http request "/metrics/json" to get a snapshot of all the registered metrics in json format. For master, requests "/metrics/master/json" and "/metrics/applications/json" can be sent seperately to get metrics snapshot of instance master and applications. MetricsServlet may not be configured by self.

但那是获取 html 页面而不是 json。只有“/metrics/json”以 json 格式获取统计信息。 除此之外,以编程方式了解 application_id 在纱线集群模式下运行时本身就是一个挑战。

我检查了Spark Monitoring page 的 REST API 部分,但是当我们在 yarn-cluster 模式下运行 spark 作业时,这不起作用。欢迎任何指针/答案。

【问题讨论】:

    标签: hadoop-yarn spark-streaming


    【解决方案1】:

    您应该能够使用以下方式访问 Spark REST API:

    http://yarn-cluster:8088/proxy/application_1446697245218_0091/api/v1/applications/

    从这里您可以从列表中选择 app-id,然后使用以下端点获取有关执行者的信息,例如:

    http://yarn-cluster:8088/proxy/application_1446697245218_0091/api/v1/applications/{app-id}/executors

    我使用在 yarn 集群模式下运行的 spark 流应用程序验证了这一点。

    我将解释我是如何使用网络浏览器获得 JSON 响应的。 (这适用于纱线集群模式下的 Spark 1.5.2 流应用程序)。

    首先,使用 hadoop url 查看 RUNNING 应用程序。 http://{yarn-cluster}:8088/cluster/apps/RUNNING。

    接下来,选择一个正在运行的应用程序,例如 http://{yarn-cluster}:8088/cluster/app/application_1450927949656_0021。

    接下来,单击 TrackingUrl 链接。这使用代理,在我的情况下端口不同:http://{yarn-proxy}l:20888/proxy/application_1450927949656_0021/。这显示了火花 UI。现在,将 api/v1/applications 附加到此 URL:http://{yarn-proxy}l:20888/proxy/application_1450927949656_0021/api/v1/applications。

    您应该会看到 JSON 响应,其中包含提供给 SparkConf 的应用程序名称和应用程序的启动时间。

    【讨论】:

    • 嗨,yarn-cluster:8088/proxy/application_1446697245218_0091/api/v1/… 给了我一个 HTML 页面,我想要 Jason 格式的统计信息。由于我事先(以编程方式)不知道 application_id,所以到目前为止,我只是在 Web UI 中查看正在运行的应用程序的 ID 以获取 json 格式的统计信息。 [application_1446697245218_0091 是我的 application_id]。谢谢。
    • 有趣,我看到的是 JSON,而不是 html。请注意,“application_1446697245218_0091”是 YARN 应用程序 ID,但在 spark 配置中配置 appName 时也会设置 Spark 应用程序 ID;您想在使用 Spark REST API 时使用 Spark 应用程序 ID。
    • 示例:curl http://cmc-c1.d0hxdbqvsmtenbkqzylhziqimh.fx.internal.cloudapp.net:8088/proxy/application_1584017759_0018/api/v1/applications/application_1520584017759_0018/executors - 这确实有效,并为我带来了 JSON 响应。
    • 嗨,有没有办法在应用程序完成执行后保持 api 端点可用?
    【解决方案2】:

    我能够使用/jobs/ 端点重建 Spark Streaming Web UI 中看到的列中的指标(批处理开始时间、处理延迟、调度延迟)。

    我使用的脚本是可用的here。我写了一个简短的post 描述并将其功能绑定到 Spark 代码库。这不需要任何网络抓取。

    它适用于 Spark 2.0.0 和 YARN 2.7.2,但也适用于其他版本组合。

    【讨论】:

    • 有没有办法同时获得每批处理的记录数?
    • @Emad 从 Azure HDInsight 集群运行时怎么样?
    【解决方案3】:

    您需要浏览 HTML 页面以获取相关指标。没有用于捕获此信息的 Spark 休息端点。

    【讨论】:

    • 这是救援的最后一个解决方案。顺便说一句,我知道 UI 团队正在采用相同的方法(通过 HTML 页面抓取指标)。感谢您提供信息。
    • 实际上有,如文件here 所述。在使用 webapp 代理的 YARN 模式下,事情可能会变得有点复杂,但请参阅下面的答案(应该接受而不是恕我直言)。谢谢,
    • 这不对。它记录在这里:spark.apache.org/docs/latest/monitoring.html YARN UI / 历史服务器从哪里挑选它?它必须使用某种 REST API
    猜你喜欢
    • 2016-04-09
    • 2023-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-10
    • 2016-04-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多