Apache spark 如何访问Spark流媒体应用程序的统计端点?

Apache spark 如何访问Spark流媒体应用程序的统计端点?,apache-spark,spark-streaming,amazon-emr,Apache Spark,Spark Streaming,Amazon Emr,从Spark 2.2.0开始,API中有了新的端点,用于获取有关流作业的信息 我在EMR集群上运行Spark,在集群模式下使用Spark 2.2.0 当我点击流媒体作业的端点时,它给我的只是一条错误消息: 没有连接到的流式侦听器 我已经对Spark代码库进行了一些挖掘,但是这个特性并没有很好的文档记录。所以我很好奇这是不是一只虫子?是否需要进行一些配置才能使该端点正常工作 在集群上运行时,这似乎是一个特别的问题。在我的本地计算机上,Spark 2.2.0上运行的相同代码显示了预期的统计信息,但

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

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

当我点击流媒体作业的端点时,它给我的只是一条错误消息:

没有连接到的流式侦听器

我已经对Spark代码库进行了一些挖掘,但是这个特性并没有很好的文档记录。所以我很好奇这是不是一只虫子?是否需要进行一些配置才能使该端点正常工作



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

我使用的是最新的Spark 2.3.0-SNAPSHOT,它是今天从master so YMMV上构建的。它工作得很好

是否需要进行一些配置才能使该端点正常工作

不,它应该可以正常工作,默认配置没有改变

确保您使用驱动程序的主机和端口(谣传您也可以访问Spark History Server的
18080
,该服务器显示所有相同的端点,运行相同的作业,但未连接流式侦听器)


正如您在中所看到的,只有在未注册
ui.getStreamingJobProgressListener
时才会发生这种情况(结果为

所以现在的问题是为什么
SparkListener
没有注册

这就引出了使用方法专门设置的var,而
StreamingTab
(这就是为什么我问您是否可以看到Streaming选项卡的原因)

换句话说,如果您在web UI中看到“流”选项卡,则可以使用流度量端点。检查指向端点的URL,其格式应为:

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

我试图复制你的案例,并做了以下工作,这使我找到了一个工作案例

  • 启动了Spark流媒体应用程序的官方示例之一

    $ ./bin/run-example streaming.StatefulNetworkWordCount localhost 9999
    
    我确实先运行了
    nc-lk9999

  • 打开web UI@以确保流媒体选项卡在那里

  • 确保使用应用程序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"
        }
    ]
    
  • 已访问Spark Streaming应用程序@的终结点


  • 有一把。端点的基础是
    /api/v1/applications/[app id]/streaming/
    ,端点用于统计、接收器、批次等。有关完整列表,请参阅。特别是,我对
    /api/v1/applications/[app id]/streaming/statistics
    感兴趣,但它们都有相同的问题。是的,它们都在运行,而且流选项卡也显示在web UI中。反复检查了几次才确定。我能想到的唯一可能产生任何影响的差异是,在集群模式下,您使用的不是
    [app id]
    ,而是
    [app id]/[trust id]
    ,但我已经尝试过使用或不使用trust id,在没有尝试id的情况下,它只是说没有这样的工作。我对spark 2.2也有同样的问题,但它是在独立集群上运行的。我没有看到“流”选项卡。有进一步调试的建议吗?由于某些内部依赖关系,我无法升级版本。我认为您可能看到了错误的UI(应该是Spark应用程序的非Spark Standalone),或者Spark应用程序没有初始化
    StreamingContext
    。不管怎样,如果没有更多的信息,很难提供帮助。使用gist.github.com并添加一些屏幕截图?或者只问一个单独的问题,让空间包含所有细节。当我遇到这个问题时,我对流媒体还不熟悉。我的困惑是结构化流媒体和数据流。”端口4040上的流统计的UI是特定于数据流的,类似的功能对于结构化流不可用。如果最初的问题提到了DStream,可能会更清楚。@Gowtham也许我们需要你再问一个问题?
    $ 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"
    }