【问题标题】:Spark streaming context hangs on stopSpark 流式传输上下文在停止时挂起
【发布时间】:2015-10-20 03:28:15
【问题描述】:

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

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 1.5.+ 时也有同样的经历。由于stop() 仍在文档和API 中,我认为它有一些价值,但这可能现在仅供内部使用......我只是awaitTermination()

标签: scala apache-spark spark-streaming


【解决方案1】:

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

您的代码在 1.4 之前可以工作,现在它会在您遇到的情况下挂起。你可以简单地移除你的钩子,优雅的关闭应该会自动发生。

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

spark.streaming.stopGracefullyOnShutdown

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

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

【讨论】:

  • 我不太明白。以前有两个选择,优雅而不是那么优雅。这些是如何处理的?
  • 我明白了。但是我已经让我的程序以不同的方式处理不同的信号。我想那可能现在就得走了。不过,之前的事情对我来说似乎更灵活。感谢您的帮助,我将在验证后将其标记为正确。
  • 你仍然可以处理你自己的信号,只是不要在你的关闭钩子中调用 ssc.stop,Spark 会处理那个
猜你喜欢
  • 2017-09-15
  • 2013-09-24
  • 2016-04-20
  • 2015-09-15
  • 2015-12-13
  • 1970-01-01
  • 1970-01-01
  • 2018-05-27
  • 1970-01-01
相关资源
最近更新 更多