2015-09-27 63 views
0

使用Spark 1.5與Actor接收器進行流式傳輸。與演員進行的Spark流式永不終止

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! 

當產生的演員是關機。如果我有一個Ctrl+Cprintln SBT的ssc.awaitTermination()線後,將完成的代碼不會超過ssc.awaitTermination()

進步。

Spark應該如何終止?

回答

1

作爲函數名稱提示,您是正確的Spark Streaming將等待終止。要殺死一個Streaming應用程序,您可以發送一個SIGTERM到該進程,例如使用kill命令。

正如你還可以在Spark Standalone documentation看你也可以用星火提交殺死進程:

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

您可以定義要在過程中關閉,通過調用sys.ShutdownHookThread運行一些代碼。

sys.ShutdownHookThread { 
    log.info("Stopping Spark Streaming...") 
    ssc.stop(stopSparkContext = true, stopGracefully = true) 
    log.info("Shutting down the application...") 
} 
+0

我很抱歉,如果我失去了明顯的東西,但我不明白這是如何回答我的問題 - 我如何退出awaitTermination()? – BAR

+0

您可以使用kill和SIGTERM或使用「spark-class ... kill」來終止該進程,或者使用CTRL-C進行操作。然後這個過程將結束。 –