如何访问 Spark Streaming 应用程序的统计端点?

2024-05-23

从 Spark 2.2.0 开始,API 中有新的端点用于获取有关流作业的信息。

我在 EMR 集群上运行 Spark,在集群模式下使用 Spark 2.2.0。

当我到达流作业的端点时,它给我的只是错误消息:

没有附加到的流侦听器

我已经深入研究了 Spark 代码库,但这个功能没有很好的文档记录。所以我很好奇这是否是一个错误?我需要做一些配置才能使该端点正常工作吗?


当在集群上运行时,这似乎是一个特别的问题。在我的本地计算机上的 Spark 2.2.0 上运行的相同代码显示了预期的统计信息,但在集群上运行时给出了错误消息。


我正在使用最新的Spark 2.3.0-快照今天由大师建造YMMV。效果很好。

我需要做一些配置才能使该端点正常工作吗?

不。它应该可以正常工作,无需更改默认配置。

确保您使用驱动程序的主机和端口(如rumors您还可以访问吗18080Spark History Server 确实显示了所有相同的端点和正在运行的相同作业,但没有附加流侦听器)。


正如你在错误消息所在的源代码 https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/status/api/v1/streaming/ApiStreamingApp.scala?utf8=%E2%9C%93#L50它只有在以下情况下才会发生ui.getStreamingJobProgressListener尚未注册(最终结果为case None).

所以现在的问题是为什么会这样SparkListener不被注册?

这引导我们到流作业进度监听器 https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/ui/SparkUI.scala?utf8=%E2%9C%93#L57使用设置的 var设置StreamingJobProgressListener https://github.com/apache/spark/blob/master/core/src/main/scala/org/apache/spark/ui/SparkUI.scala?utf8=%E2%9C%93#L139 method while StreamingTab 正在实例化 https://github.com/apache/spark/blob/master/streaming/src/main/scala/org/apache/spark/streaming/ui/StreamingTab.scala?utf8=%E2%9C%93#L41(这就是我问您是否可以看到“流媒体”选项卡的原因)。

换句话说,如果您在 Web UI 中看到“流”选项卡,则表明您有可用的流指标端点。检查端点的 URL,其格式应为:

http://[driverHost]:[port]/api/v1/applications/[appId]/streaming/statistics

我尝试重现您的案例,并执行了以下操作,使我找到了一个可行的案例。

  1. 启动 Spark Streaming 应用程序的官方示例之一。

    $ ./bin/run-example streaming.StatefulNetworkWordCount localhost 9999
    

    我确实跑了nc -lk 9999 first.

  2. 打开网络用户界面@http://localhost:4040/streaming http://localhost:4040/streaming以确保流媒体选项卡在那里。

  3. 确信http://localhost:4040/api/v1/applications/ http://localhost:4040/api/v1/applications/使用应用程序 ID 进行响应。

    $ http http://localhost:4040/api/v1/applications/
    HTTP/1.1 200 OK
    Content-Encoding: gzip
    Content-Length: 266
    Content-Type: application/json
    Date: Wed, 13 Dec 2017 07:58:04 GMT
    Server: Jetty(9.3.z-SNAPSHOT)
    Vary: Accept-Encoding, User-Agent
    
    [
        {
            "attempts": [
                {
                    "appSparkVersion": "2.3.0-SNAPSHOT",
                    "completed": false,
                    "duration": 0,
                    "endTime": "1969-12-31T23:59:59.999GMT",
                    "endTimeEpoch": -1,
                    "lastUpdated": "2017-12-13T07:53:53.751GMT",
                    "lastUpdatedEpoch": 1513151633751,
                    "sparkUser": "jacek",
                    "startTime": "2017-12-13T07:53:53.751GMT",
                    "startTimeEpoch": 1513151633751
                }
            ],
            "id": "local-1513151634282",
            "name": "StatefulNetworkWordCount"
        }
    ]
    
  4. 访问 Spark Streaming 应用程序的端点 @http://localhost:4040/api/v1/applications/local-1513151634282/streaming/statistics http://localhost:4040/api/v1/applications/local-1513151634282/streaming/statistics.

    $ http http://localhost:4040/api/v1/applications/local-1513151634282/streaming/statistics
    HTTP/1.1 200 OK
    Content-Encoding: gzip
    Content-Length: 219
    Content-Type: application/json
    Date: Wed, 13 Dec 2017 08:00:10 GMT
    Server: Jetty(9.3.z-SNAPSHOT)
    Vary: Accept-Encoding, User-Agent
    
    {
        "avgInputRate": 0.0,
        "avgProcessingTime": 30,
        "avgSchedulingDelay": 0,
        "avgTotalDelay": 30,
        "batchDuration": 1000,
        "numActiveBatches": 0,
        "numActiveReceivers": 1,
        "numInactiveReceivers": 0,
        "numProcessedRecords": 0,
        "numReceivedRecords": 0,
        "numReceivers": 1,
        "numRetainedCompletedBatches": 376,
        "numTotalCompletedBatches": 376,
        "startTime": "2017-12-13T07:53:54.921GMT"
    }
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何访问 Spark Streaming 应用程序的统计端点? 的相关文章

随机推荐