2014-10-28 53 views
5

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

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

+3

取决于你如何运行你的驱动程序。例如,如果以纱线簇模式运行,纱线将重试您的驱动程序。但是,这意味着重新运行您的所有工作。 – zsxwing 2014-10-29 01:14:27

+0

谢谢。所以我需要设计它,以便驱动程序可以在某处保存子计算的进度,并在某些日志中更新计算的“阶段”,并在内部处理容错问题。我猜 – 2014-10-29 01:41:56

+0

正确。您需要自行恢复驱动程序。 – zsxwing 2014-10-29 01:50:17

回答

4

由于@zsxwing指出这取决于你如何运行你的驱动程序。除了使用纱线运行外,还可以使用集群部署模式运行作业(这是一个spark-submit参数)。在Spark Streaming中,您指定--supervise并且Spark将为您重新开始工作。详情请见Spark Streaming Guide

+0

使用--supervise时是否需要检查点? – okwap 2018-01-04 07:28:01

2

是的,你可以重新启动火花应用程序。 有几个特定于正在使用的集群管理器的选项。例如,对于具有群集部署模式的Spark独立群集,您还可以指定- 监督以确保驱动程序在发生非零退出代码失败时自动重新启动。要列举可用的火花提交所有这样的选择,与--help运行:

在群集中部署模式星火独立的集群上运行监督

./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 
0

按星火文档: -

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

所以-​​-supervise将只与独立集群模式配置mapreduce.am.max-尝试财产mapred现场工作,如果你的应用程序在纱线集群模式,然后提交纱将处理驱动程序的重新启动.xml,所以你的代码应该是这样的,它删除输出目录并从头开始,否则将会失败,并且输出目录的错误已经存在。

相关问题