没有活动时杀死Spark Streaming作业

时间:2019-06-10 06:18:35

标签: apache-spark spark-streaming

我想在一段时间内没有任何活动(即接收方未收到消息)时终止我的Spark Streaming工作。我尝试这样做

var counter = 0

myDStream.foreachRDD {
  rdd =>
    if (rdd.count() == 0L)
    {
      counter = counter + 1
      if (counter == 40) {
        ssc.stop(true, true)
      }
    } else {
      counter = 0
    }
}

是否有更好的方法?每当没有活动时,我如何使变量对所有接收者可用,并将变量更新为1?

1 个答案:

答案 0 :(得分:1)

使用NoSQL表(例如Cassandra或HBase)来保持计数器。您无法在循环内处理流轮询。如果没有活动,则使用NoSQL或Maria DB实施相同的逻辑,并对流作业执行正常关机。 我这样做的方法是我在Maria DB中维护了一个表,该表用于流作业,轮询间隔为5分钟。它每5分钟访问一次数据库并写入消耗的记录计数,该方法还会返回最近时间戳记中零个记录行项目的计数。这帮助我极大地管理了流作业管理。此外,此表通常还可以帮助我o根据用shell脚本编写的逻辑

自动触发流作业。