Apache spark Spark理论上会丢失失败作业的数据吗?

Apache spark Spark理论上会丢失失败作业的数据吗?,apache-spark,kubernetes,Apache Spark,Kubernetes,因此,我们使用RDD并对一组数据执行flatMap。然后,我们使用映射操作转换的每个元素 val元素RDD:RDD[Element]=。。。 val结果=elements.map(processData); 在一组固定的元素上,我们看到,在每次运行中,如果一些执行器在映射操作期间死亡,则spark会启动新的执行器,但它不会向操作提供数据,因此我们丢失了数据。我们希望Spark能够提供数据,或者至少从头开始重新运行该阶段 我们使用Spark 2.4的最新Kubernetes功能(仍在开发中) 更

因此,我们使用
RDD
并对一组数据执行
flatMap
。然后,我们使用映射操作转换的每个元素

val元素RDD:RDD[Element]=。。。
val结果=elements.map(processData);
在一组固定的元素上,我们看到,在每次运行中,如果一些执行器在映射操作期间死亡,则spark会启动新的执行器,但它不会向操作提供数据,因此我们丢失了数据。我们希望Spark能够提供数据,或者至少从头开始重新运行该阶段

我们使用Spark 2.4的最新Kubernetes功能(仍在开发中)


更新:文档说这是不可能的情况,但我们从执行者那里获得的日志显示,在对固定数据集进行数据处理的过程中,我们丢失了不同的数据片段。此外,如果我们在一个过程中没有杀死任何执行者,我们就不会丢失任何数据

否。为已死亡的执行器处理的数据将丢失,但当驱动程序注意到执行器出现故障时,它会将已死亡的执行器的作业分配给仍然活着的执行器。在每个作业都成功完成之前,Spark不会成功地使应用程序成功

您可以阅读一些有关Spark高可用性的说明

更新:
正如@user6910411所指出的,您可能会丢失数据:如果Spark应用程序使用的数据源不是持久的,或者它提供了临时数据。在这些情况下,修改Spark应用程序使用的数据可能会导致数据丢失

当且仅当假设数据源是持久/可靠的时,整个语句才是正确的。如果不是这样,执行器故障可能导致无法恢复的数据丢失。同意。如果您有不可靠的数据源,最好是检查点,即从源创建一个中间表,然后对其进行处理。您是对的,我已经更新了我的答案,指出了这一点。不幸的是,这些情况中没有一个与我们的相关,我们从文件中读取数据。还有什么其他想法会导致这种奇怪的行为吗?@GregTk听起来你在处理一个非常特殊的场景。因此,对流程进行某种形式的或至少是详细的描述(您如何加载、什么
processData
、它是什么接收器、您如何记录等等)确实会对这个问题有所帮助。