Spark 中的沿袭是什么?

What is Lineage In Spark?

沿袭如何帮助重新计算数据?

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

关于血统的一切理解都在 RDD 的定义中。

让我们回顾一下:

RDDs are immutable distributed collection of elements of your data that can be stored in memory or disk across a cluster of machines. The data is partitioned across machines in your cluster that can be operated in parallel with a low-level API that offers transformations and actions. RDDs are fault tolerant as they track data lineage information to rebuild lost data automatically on failure

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

  • How does Spark work internally?

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

的文章

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

如果执行器计算你的数据失败,15 分钟后,它将返回到你的最后一个 检查点,无论它来自 source 缓存 在内存中 and/or 在磁盘上。

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

调用转换(映射或过滤器等)时,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().

Action 用于将结果保存到某个位置或显示它。 RDD沿袭信息也可以通过命令filteredRdd.toDebugString打印出来(filteredRdd这里是RDD)。此外,DAG 可视化以非常直观的方式显示了完整的图形,如下所示:

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

来源:What is Lineage Graph

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