Scala 如果在过去1小时内未推送任何记录,如何设置spark streaming作业警报?
我有一个spark流媒体工作,可以读取和处理solace队列中的数据。如果在过去一小时内没有数据被消耗,我想设置一个警报。目前,我已将批处理窗口设置为1分钟。如果连续一小时未消耗任何数据,如何添加警报以通知来源Scala 如果在过去1小时内未推送任何记录,如何设置spark streaming作业警报?,scala,apache-spark,spark-streaming,solace,Scala,Apache Spark,Spark Streaming,Solace,我有一个spark流媒体工作,可以读取和处理solace队列中的数据。如果在过去一小时内没有数据被消耗,我想设置一个警报。目前,我已将批处理窗口设置为1分钟。如果连续一小时未消耗任何数据,如何添加警报以通知来源 您有几种选择: 将StreamListener()的实现添加到订阅的流中。然后,覆盖onBatchCompleted以访问将为您提供批处理时间和大小的BatchInfo。有了这些信息,您可以跟踪发生的情况,并在特定时间段内未收到任何数据时发出警报 您还可以使用为监视提供的RESTAPI
您有几种选择:
- 将
()的实现添加到订阅的流中。然后,覆盖StreamListener
以访问将为您提供批处理时间和大小的onBatchCompleted
。有了这些信息,您可以跟踪发生的情况,并在特定时间段内未收到任何数据时发出警报BatchInfo
- 您还可以使用为监视提供的RESTAPI,如所述。您可以从外部进行检查,如果需要,可以发出警报。例如,检查
/applications/[app id]/streaming/batches
getTimeStampFromHDFS()
,它将在您的hdfs文件中返回时间戳;updateTimestampHDFS(currentTimestamp)
,您将在微批处理中收到记录时更新时间戳
dstream.foreachRDD{rdd =>
if(rdd.isEmpty) {
if((System.currentTimeMillis - getTimeStampFromHDFS()) / (1000 * 60 * 60) >= 1) sendMailAlert()
}
else {
updateTimestampHDFS(System.currentTimeMillis)
}
}
你想用Pyspark还是Solace?我想用我的spark代码来处理。我有一个可以发送通知的邮寄服务,我只需要知道我什么时候可以发送通知?我应该在foreachRDD中编写什么来处理没有报告的数据?您可以执行类似以下伪代码
stream\rdd.foreach(lambda x:do\u something(),如果x.isEmpty()否则通过)
。我不确定它是否有效,但我认为答案是这样的this@pissall如果我在isEmpty()上添加一个检查,它将只检查当前批次(1分钟)中的行数是否为空,而不是连续一小时?