Apache spark 在没有活动时终止spark流作业

Apache spark 在没有活动时终止spark流作业,apache-spark,spark-streaming,Apache Spark,Spark Streaming,我想在一段时间内没有活动(即接收者没有接收消息)时终止spark流媒体工作。我试过这么做 var counter = 0 myDStream.foreachRDD { rdd => if (rdd.count() == 0L) { counter = counter + 1 if (counter == 40) { ssc.stop(true, true) } } else { counter =

我想在一段时间内没有活动(即接收者没有接收消息)时终止spark流媒体工作。我试过这么做

var counter = 0

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

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

使用NoSQL表(如Cassandra或HBase)保留计数器。不能在循环内处理流轮询。使用NoSQL或Maria DB实现相同的逻辑,如果没有活动发生,则对流作业执行优雅的关闭。
我这样做的方式是,我在Maria DB中为流媒体作业维护了一个表,轮询间隔为5分钟。每隔5分钟,它会访问数据库并写入它所消耗的记录计数。该方法还会返回在最新时间戳期间零记录行项目的计数。这对我管理流媒体作业管理有很大帮助。此外,此表通常帮助我根据shell脚本中编写的逻辑自动触发流式处理作业。请使用NoSQL表(如Cassandra或HBase)保留计数器。不能在循环内处理流轮询。使用NoSQL或Maria DB实现相同的逻辑,如果没有活动发生,则对流作业执行优雅的关闭。
我这样做的方式是,我在Maria DB中为流媒体作业维护了一个表,轮询间隔为5分钟。每隔5分钟,它会访问数据库并写入它所消耗的记录计数。该方法还会返回在最新时间戳期间零记录行项目的计数。这对我管理流媒体作业管理有很大帮助。此外,此表通常帮助我根据shell脚本中编写的逻辑自动触发流媒体作业

谢谢您的建议,我将尝试一下。我想通过广播变量来做。请随意传递您的建议。广播是一个不变的变量。一旦播出就无法更新,无法更新。你可以试试。谢谢你的建议,我会试试的。我想通过广播变量来做。请随意传递您的建议。广播是一个不变的变量。一旦播出就无法更新,无法更新。你可以试试。