在yarn集群模式下运行时,如何使用REST调用获取Spark Streaming作业统计信息



我有一个在"纱线集群"模式下的Yarn Cluster上运行的流式程序。(-主纱簇)。我想使用json格式的RESTAPI获取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页面的REST API部分,但当我们在yarn-cluster模式下运行Spark作业时,这并没有起作用。欢迎任何建议/答案。

您应该能够使用:访问Spark REST API

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

从这里,您可以从列表中选择应用程序id,然后使用以下端点来获取执行者的信息,例如:

http://yarn-cluster:8088/proxy/application_1446697245218_0091/api/v1/applications/{应用程序id}/执行程序

我用我的火花流应用程序验证了这一点,该应用程序正在纱线集群模式下运行。

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

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

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

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

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

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

我使用的脚本在这里可用。我写了一篇简短的文章,描述了它的功能并将其绑定到Spark代码库中。这不需要任何网页抓取。

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

您需要浏览HTML页面才能获得相关指标。没有用于捕获此信息的Spark rest端点。

最新更新