沿袭如何帮助重新计算数据?
例如,我有几个节点每个节点计算 30 分钟的数据。如果一个在 15 分钟后失败,我们是否可以再次使用 lineage 重新计算 15 分钟内处理的数据,而无需再次给出 15 分钟?
沿袭如何帮助重新计算数据?
例如,我有几个节点每个节点计算 30 分钟的数据。如果一个在 15 分钟后失败,我们是否可以再次使用 lineage 重新计算 15 分钟内处理的数据,而无需再次给出 15 分钟?
关于血统的一切都在定义中RDD
。
所以让我们回顾一下:
RDD 是数据元素的不可变分布式集合,可以跨机器集群存储在内存或磁盘中。数据在集群中的机器上进行分区,这些机器可以与提供转换和操作的低级 API 并行操作。RDD 具有容错性,因为它们跟踪数据沿袭信息以在发生故障时自动重建丢失的数据
所以主要有两点需要了解:
不幸的是,这些主题在一个答案中讨论的时间很长。我建议您花一些时间阅读它们以及以下有关Data Lineage的文章。
现在回答您的问题和疑问:
如果执行器无法计算您的数据,15 分钟后,它将返回到您的最后一个检查点,无论它来自源还是内存和/或磁盘中的缓存。
因此,它不会为您节省您提到的那 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之间的所有依赖关系都将记录在一个图中,而不是原始数据中。
资料来源:什么是谱系图
DEF:Spark 沿袭图是 RDD 之间的依赖关系集 • 为每个 Spark 应用程序单独维护沿袭图 • 沿袭图用于按需重新计算 RDD,并在持久化 RDD 的部分丢失时恢复丢失的数据 • 注意:小心,不要将沿袭图与 动作强制评估调用它们的 RDD 沿袭图中的所有(上游)转换