首页 文章

如何停止火花流媒体工作?

提问于
浏览
24

我有一个连续运行的Spark Streaming作业 . 我如何优雅地停止工作?我已经阅读了在作业监视中附加关闭钩子并将SIGTERM发送到作业的通常建议 .

sys.ShutdownHookThread {
  logger.info("Gracefully stopping Application...")
  ssc.stop(stopSparkContext = true, stopGracefully = true)
  logger.info("Application stopped gracefully")
}

它似乎工作,但看起来不是最简单的方法来阻止这项工作 . 我在这里错过了什么吗?

从代码的角度来看,它可能有意义,但您如何在群集环境中使用它?如果我们启动一个火花流工作(我们在集群中的所有节点上分配作业),我们将不得不跟踪作业的PID和运行它的节点 . 最后,当我们必须停止进程时,我们需要跟踪作业运行的节点以及该进程的PID . 我只是希望流媒体作业有一种更简单的工作控制方式 .

3 回答

  • 0

    您可以通过运行以下命令在群集模式下停止流式上下文,而无需发送SIGTERM . 这将停止流式上下文,而无需使用线程挂钩显式停止它 .

    $SPARK_HOME_DIR/bin/spark-submit --master $MASTER_REST_URL --kill $DRIVER_ID

    • $ MASTER_REST_URL是火花驱动程序的其余URL,例如spark:// localhost:6066

    • $ DRIVER_ID类似于driver-20150915145601-0000

    如果您希望spark能够优雅地停止您的应用程序,您可以在最初提交spark应用程序时尝试设置以下系统属性(请参阅设置spark配置属性的http://spark.apache.org/docs/latest/submitting-applications.html) .

    spark.streaming.stopGracefullyOnShutdown=true

    这没有正式记录,我通过查看1.4源代码收集了这些内容 . 此标志在独立模式下受到尊重 . 我还没有在集群模式下测试它 .

    我正在使用spark 1.4 . *

  • 19

    如果您只需要停止运行流应用程序,那么最简单的方法是通过Spark管理UI(您可以在Spark master的启动日志中找到它的URL) .

    UI中有一个部分显示正在运行的流应用程序,每个应用程序ID附近都有一些微小的按钮.1224975_ url按钮 .

  • -1

    现在是官方的,请在这里查看原始的apache文档 - http://spark.apache.org/docs/latest/configuration.html#spark-streaming

相关问题