Spark 流上下文挂起停止

Spark streaming context hangs on stop

我正在尝试编写一个 spark 流程序,我想在其中正常关闭我的应用程序,以防我的应用程序收到关闭挂钩。我写了下面的片段来完成这个。

sys.ShutdownHookThread {
  println("Gracefully stopping MyStreamJob")
  ssc.stop(stopSparkContext = true, stopGracefully = true)
  println("Streaming stopped")
  sys.exit(0)
}

调用此代码时,仅调用第一个 println。那是从未见过的第二个 println Streaming Stopped。我在控制台上收到的最后一条消息是:

39790 [shutdownHook1] INFO org.spark-project.jetty.server.handler.ContextHandler  - stopped o.s.j.s.ServletContextHandler{/streaming,null}
39791 [shutdownHook1] INFO org.spark-project.jetty.server.handler.ContextHandler  - stopped o.s.j.s.ServletContextHandler{/streaming/batch,null}
39792 [shutdownHook1] INFO org.spark-project.jetty.server.handler.ContextHandler  - stopped o.s.j.s.ServletContextHandler{/static/streaming,null}
15/10/19 19:59:43 INFO handler.ContextHandler: stopped o.s.j.s.ServletContextHandler{/static/streaming,null}

我正在使用 spark 1.4.1。我必须使用 kill -9 手动终止作业才能结束火花。这是预期的行为还是我做错了什么?

Spark 添加了自己的调用来停止 StreamingContext。 See this email thread.

您的代码在 1.4 之前可以正常工作,现在它会像您遇到的那样挂起。您可以简单地删除您的挂钩,正常关机应该会自动发生。

您现在可以使用以下配置参数来指定是否正常关机:

spark.streaming.stopGracefullyOnShutdown

SparkContext 将在正常关闭后停止。参见:

"Do not stop SparkContext, let its own shutdown hook stop it"