spark中的血统是什么?

nfg76nw0  于 2021-05-29  发布在  Hadoop
关注(0)|答案(3)|浏览(525)

沿袭如何帮助重新计算数据?
例如,我让几个节点分别计算30分钟的数据。如果一个在15分钟后失败,我们是否可以再次使用lineage重新计算在15分钟内处理的数据,而不需要再次给出15分钟?

ttp71kqs

ttp71kqs1#

在spark中,沿袭图是现有rdd和新rdd之间的依赖关系图。这意味着rdd之间的所有依赖关系都将记录在一个图中,而不是原始数据。
来源:什么是谱系图

yrefmtwq

yrefmtwq2#

调用转换(Map或过滤器等)时,spark不会立即执行它,而是为每个转换创建一个沿袭。沿袭将跟踪所有转换必须应用于该rdd上的内容,包括从何处读取数据。
例如,考虑以下示例

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

sc.textfile()和myrdd.filter()不会立即执行,只有在对rdd-here filtereddd.count()调用操作时才会执行。
操作用于将结果保存到某个位置或显示它。还可以使用命令filtereddd.todebugstring(filtereddd是这里的rdd)打印rdd沿袭信息。此外,dag可视化以非常直观的方式显示完整的图形,如下所示:

j13ufse2

j13ufse23#

所有关于血统的理解都在 RDD .
让我们回顾一下:
RDD是数据元素的不可变分布式集合,可以跨计算机集群存储在内存或磁盘中。数据在集群中的多台计算机之间进行分区,这些计算机可以与提供转换和操作的低级api并行操作。RDD是容错的,因为它们跟踪数据沿袭信息,以便在发生故障时自动重建丢失的数据
因此,主要有两件事需要了解:
血统是如何在RDD中传承下来的?
内部Spark是如何产生的?
不幸的是,这些主题在一个单一的答案中要讨论的时间相当长。我建议您花一些时间阅读它们以及下面这篇关于数据沿袭的文章。
现在回答你的问题和疑问:
如果执行器无法计算您的数据,15分钟后,它将返回到您的最后一个检查点,无论是来自源还是内存和/或磁盘中的缓存。
因此,这不会节省你刚才提到的15分钟!

相关问题