如何获取Spark Streaming处理的记录总数?

时间:2016-11-04 11:20:30

标签: apache-spark

有人知道Spark如何计算其记录数量(我认为它与批次中的事件数量相同),如此处所示?

enter image description here

我试图弄清楚如何远程获取此值(UI中的Streaming选项不存在REST-API)。

基本上我尝试用它来获取我的应用程序处理的记录总数。我需要Web门户的这些信息。

我试着计算每个阶段的Records,但它给了我完全不同的数字,如上图所示。每个阶段都包含有关其记录的信息。如图所示

enter image description here

我使用这个简短的python脚本来计算每个阶段的" inputRecords"。这是源代码:

import json, requests, urllib
print "Get stages script started!"
#URL REST-API
url = 'http://10.16.31.211:4040/api/v1/applications/app-20161104125052-0052/stages/'
response = urllib.urlopen(url)
data = json.loads(response.read())

stages = []
print len(data)
inputCounter = 0
for item in data:
        stages.append(item["stageId"])
        inputCounter += item["inputRecords"]
print "Records processed: " + str(inputCounter)

如果我理解正确:每个Batch有一个Job,每个Job有多个Stages,这些Stages有多个Tasks }。

所以对我来说,计算每个Stage的输入是有意义的。

1 个答案:

答案 0 :(得分:3)

Spark在驱动程序上提供了一个指标端点:

<driver-host>:<ui-port>/metrics/json

Spark Streaming应用程序将报告UI中可用的所有指标等等。您可能正在寻找的是:

<driver-id>.driver.<job-id>.StreamingMetrics.streaming.totalProcessedRecords: {
value: 48574640
},
<driver-id>.driver.<job-id>.StreamingMetrics.streaming.totalReceivedRecords: {
value: 48574640
}

此端点可以自定义。有关信息,请参阅Spark Metrics