我在" 纱线群集"" 纱线群集"中的纱线群集上运行了一个spark 流式程序模式。 ( -master yarn-cluster )。 我想使用json格式的REST API获取spark作业统计信息。 我可以使用REST url调用获取基本统计信息: http://yarn-cluster:8088/proxy/application_1446697245218_0091/metrics/json。但这是非常基本的统计数据。
但是我想获取每个执行程序或基于RDD的统计信息。 如何使用REST调用以及在哪里可以找到确切的REST网址以获取这些统计信息 。 虽然 $ SPARK_HOME / conf / metrics.properties 文件对网址有所了解,但
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 job时,这并没有奏效。欢迎提出任何指示/答案。
答案 0 :(得分:7)
您应该能够使用以下方式访问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/ {应用ID} /执行人
我通过在纱线群集模式下运行的火花流应用验证了这一点。
我将解释我是如何使用网络浏览器获得JSON响应的。 (这是针对纱线群集模式下的Spark 1.5.2流应用程序)。
首先,使用hadoop url查看RUNNING应用程序。 HTTP:// {纱簇}:8088 /簇/应用/ 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的应用程序名称和应用程序的开始时间。
答案 1 :(得分:3)
我能够使用/jobs/
端点重建Spark Streaming Web UI中的列中的指标(批处理开始时间,处理延迟,调度延迟)。
我使用的脚本可用here。我写了一篇简短的post来描述并将其功能与Spark代码库联系起来。这不需要任何网络抓取。
适用于Spark 2.0.0和YARN 2.7.2,但也适用于其他版本组合。
答案 2 :(得分:1)
您需要浏览HTML页面以获取相关指标。没有用于捕获此信息的Spark休息端点。