2015-10-19 75 views
1

我想写一个火花流媒体程序,我想正常关闭我的应用程序,以防万一我的应用程序收到关机挂钩。我写了下面的代码片段来完成这个。火花流上下文挂在停止

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手动杀死火花才能结束的作业。这是预期的行为还是我做错了什么?

+0

我已经有了Spark 1.5的相同经验。由于'stop()'仍然在文档和API中,我认为它有一定的价值,但现在可能只是为了内部使用......我只是'awaitTermination()'。 – BAR

回答

3

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

你的代码可以在1.4之前工作,现在它会挂起,因为你正在经历。您可以简单地删除您的挂钩,并且正常关机应该自动发生。

您现在可以使用以下配置参数指定如果关机应是正常的:

spark.streaming.stopGracefullyOnShutdown 

的SparkContext将正常关机后停止。参见:

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

+0

我真的不明白。以前有两个选择优雅,而不是如此优雅。那些如何处理? – Sohaib

+0

更新了答案。 –

+0

我明白了。但是我已经让我的程序以不同的方式处理不同的信号。我想这可能只是现在就走。尽管如此,先前的事情似乎对我更加灵活。感谢您的帮助,一旦我对它进行验证,我会将其标记为正确。 – Sohaib