【问题标题】:Spark Streaming with Actor Never Terminates使用 Actor 的 Spark Streaming 永不终止
【发布时间】:2015-09-28 15:31:58
【问题描述】:

使用带有 Actor 接收器的 Spark 1.5 Streaming。

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!

当生成的 Actor 关闭时,代码将不会超过ssc.awaitTermination()

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

Spark 应该如何终止?

【问题讨论】:

    标签: scala apache-spark spark-streaming


    【解决方案1】:

    正如函数名称所暗示的那样,Spark Streaming 将等待终止是正确的。要终止流应用程序,您可以向该进程发送 SIGTERM,例如使用 kill 命令。

    您也可以在 Spark Standalone documentation 中看到,您也可以使用 Spark Submit 终止进程:

    ./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...")
    }
    

    【讨论】:

    • 如果我遗漏了一些明显的东西,我深表歉意,但我不明白这如何回答我的问题 - 我该如何退出 awaitTermination()?
    • 您终止进程,就像使用 CTRL-C 一样,使用 kill 和 SIGTERM 或使用“spark-class ... kill”。然后该过程将完成。
    猜你喜欢
    • 2017-07-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-10-18
    • 1970-01-01
    • 1970-01-01
    • 2020-03-19
    相关资源
    最近更新 更多