【问题标题】:What happens if the driver program crashes?如果驱动程序崩溃怎么办?
【发布时间】:2019-04-25 11:45:32
【问题描述】:

我了解工作节点是如何容错的,但是如果您的驱动程序由于某些意外原因而崩溃会发生什么? (断电/内存问题等)。

我想你会失去所有的工作,因为读取结果的代码不再运行,或者 Spark 是否知道如何重新启动它?如果有怎么办?

【问题讨论】:

  • 取决于您运行驱动程序的方式。例如,如果您在 yarn-cluster 模式下运行,yarn 将重试您的驱动程序。但是,这意味着重新运行所有作业。
  • 谢谢。所以我需要设计它,以便驱动程序在某处保存子计算的进度,并在某些日志中更新计算的“阶段”,并在内部处理容错我猜
  • 对。您需要自己恢复驱动程序。

标签: apache-spark


【解决方案1】:

正如@zsxwing 所指出的,这取决于您如何运行驱动程序。除了在 yarn 中运行之外,您还可以使用集群的部署模式运行您的作业(这是 spark-submit 的参数)。在 Spark Streaming 中,您指定 --supervise,Spark 将为您重新启动作业。详情在Spark Streaming Guide

【讨论】:

  • 如果设置了--supervise,如果驱动程序由于非零退出代码或节点故障而失败,集群管理器将重新启动驱动程序=>这是否意味着只要最终状态应用程序不成功(例如失败),应用程序一次又一次地重新启动?
【解决方案2】:

我们可以使用zookeeper和本地文件系统来配置高可用,你可以查看官方文档

http://spark.apache.org/docs/latest/spark-standalone.html#high-availability

【讨论】:

    【解决方案3】:

    是的,您可以重新启动 spark 应用程序。 有几个特定于正在使用的集群管理器的可用选项。例如,对于具有集群部署模式的 Spark 独立集群,您还可以指定 --supervise 以确保驱动程序在以非零退出代码失败时自动重新启动。要枚举所有可用于 spark-submit 的选项,请使用 --help 运行它:

    在具有监督的集群部署模式下在 Spark 独立集群上运行

    ./bin/spark-submit \
      --class org.apache.spark.examples.SparkPi \
      --master spark://207.184.161.138:7077 \
      --deploy-mode cluster \
      --supervise \
      /path/to/examples.jar \
      1000
    

    【讨论】:

      【解决方案4】:

      根据 Spark 文档:-

      Spark Standalone - 可以提交 Spark 应用程序驱动程序以在 Spark Standalone 集群中运行(请参阅集群部署模式),即应用程序驱动程序本身运行在其中一个工作节点上。此外,可以指示独立集群管理器监督驱动程序,并在驱动程序由于非零退出代码或由于运行驱动程序的节点故障而失败时重新启动它。有关更多详细信息,请参阅 Spark Standalone 指南中的集群模式和监督。

      所以 --supervise 仅适用于独立集群模式,如果您的应用程序是在 Yarn 集群模式下提交的,那么 yarn 将按照 mapred-site.xml 中的 mapreduce.am.max-attempts 属性中的配置处理驱动程序的重启,因此,您的代码应该删除输出目录并从头开始,否则将因输出目录已存在错误而失败。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2016-12-12
        • 2010-09-18
        • 2012-02-07
        • 1970-01-01
        • 1970-01-01
        • 2014-06-06
        • 2012-11-27
        • 1970-01-01
        相关资源
        最近更新 更多