Scala 与演员的火花流永不终止

Scala 与演员的火花流永不终止,scala,apache-spark,spark-streaming,Scala,Apache Spark,Spark Streaming,使用带演员接收器的Spark 1.5流媒体 val conf = new SparkConf() .setMaster("local[4]") .setAppName("ModelTest") val ssc = new StreamingContext(conf, Seconds(2)) val models = ssc.actorStream[Model](Props(...), "ModelReceiver") models.foreachRDD { rdd =>

使用带演员接收器的Spark 1.5流媒体

val conf = new SparkConf()
    .setMaster("local[4]")
    .setAppName("ModelTest")

val ssc = new StreamingContext(conf, Seconds(2))

val models = ssc.actorStream[Model](Props(...), "ModelReceiver")

models.foreachRDD { rdd => ... }

ssc.start()
ssc.awaitTermination()
// NEVER GETS HERE!
当生成的参与者关闭时,代码将不会超过
ssc.awaitTermination()

如果我在
ssc.awaitTermination()
行完成后用
Ctrl+C
a
println
杀死SBT


Spark应该如何终止?

正如函数名所提示的,Spark流媒体将等待终止,这是正确的。要杀死一个流应用程序,您可以向该进程发送一个SIGTERM,例如使用kill命令

正如您在中所看到的,您还可以使用Spark Submit终止进程:

./bin/spark-class org.apache.spark.deploy.Client kill <master url> <driver ID>

如果我遗漏了一些明显的内容,我很抱歉,但我看不出这是如何回答我的问题的-我如何退出waittermination()?您可以终止进程,就像使用CTRL-C、使用kill和SIGTERM或使用“spark class…kill”一样。然后这个过程就结束了。
sys.ShutdownHookThread {
  log.info("Stopping Spark Streaming...")
  ssc.stop(stopSparkContext = true, stopGracefully = true)
  log.info("Shutting down the application...")
}