2015-10-19 71 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