Spark 中的血统是什么?

问题描述 投票:0回答:5

谱系如何帮助重新计算数据?

例如,我有多个节点,每个节点计算数据 30 分钟。如果15分钟后失败,我们是否可以再次使用lineage重新计算15分钟处理的数据,而无需再次给出15分钟?

apache-spark hadoop data-lineage
5个回答
22
投票

关于血统的所有理解都在

RDD
的定义中。

让我们回顾一下:

RDD 是数据元素的不可变分布式集合,可以跨机器集群存储在内存或磁盘中。数据在集群中的各个机器之间进行分区,这些机器可以与提供转换和操作的低级 API 并行操作。 RDD 具有容错能力,因为它们跟踪数据沿袭信息,以便在发生故障时自动重建丢失的数据

所以主要有两点需要理解:

不幸的是,这些主题在一个答案中讨论起来很长。我建议您花一些时间阅读它们以及以下有关数据沿袭的文章。

现在回答您的问题和疑惑:

如果执行器计算您的数据失败,15 分钟后,它将返回到您的最后一个检查点,无论它是来自内存和/或磁盘中的还是缓存

因此,它不会为您节省您提到的那 15 分钟!


1
投票

当调用转换(映射或过滤器等)时,Spark 不会立即执行它,而是为每个转换创建一个沿袭。谱系将跟踪必须在该 RDD 上应用的所有转换,包括必须读取数据的位置。

例如,考虑以下示例

val myRdd = sc.textFile("spam.txt")
val filteredRdd = myRdd.filter(line => line.contains("wonder"))
filteredRdd.count()

sc.textFile()
myRdd.filter()
不会立即执行,只有在RDD上调用Action时才会执行 - 这里是
filteredRdd.count()

操作用于将结果保存到某个位置或显示它。 RDD沿袭信息也可以使用命令

filteredRdd.toDebugString
打印(
filteredRdd
是这里的RDD)。此外,DAG 可视化以非常直观的方式显示完整的图形,如下所示:


0
投票

在 Spark 中,Lineage Graph 是现有 RDD 和新 RDD 之间的依赖关系图。 这意味着RDD之间的所有依赖关系都将记录在一个图中,而不是原始数据中。

来源:什么是谱系图


0
投票

DEF:Spark 谱系图是之间的依赖关系集 RDD • 为每个 Spark 应用程序维护沿袭图 分别地 • 谱系图用于按需重新计算 RDD 并 如果持久化 RDD 的部分内容丢失,则恢复丢失的数据 • 注意:要小心,不要将谱系图与  行动强制评估所有(上游) RDD 谱系图中的转换 呼吁


0
投票

总而言之,Lineage Graph 是 Apache Spark 中的一个关键概念,它表示 Spark 应用程序中 RDD 或 DataFrame 之间的依赖关系。 Lineage Graph 通过根据父 RDD 及其转换重建丢失的 RDD 来帮助实现容错。

© www.soinside.com 2019 - 2024. All rights reserved.