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之间的所有依赖关系将被记录在一个图中,而不是原始数据。
DEF:Spark 沿袭图是一组依赖关系
RDDs
•
为每个 Spark 应用程序维护沿袭图
分别地
•
沿袭图用于按需重新计算 RDD 并
如果持久化 RDD 的部分丢失,则恢复丢失的数据
•
注意:小心,不要将谱系图与
行动强制评估所有(上游)
RDD 谱系图中的转换
拜访
沿袭如何帮助重新计算数据?
例如,我有多个节点,每个节点计算数据 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之间的所有依赖关系将被记录在一个图中,而不是原始数据。
DEF:Spark 沿袭图是一组依赖关系 RDDs • 为每个 Spark 应用程序维护沿袭图 分别地 • 沿袭图用于按需重新计算 RDD 并 如果持久化 RDD 的部分丢失,则恢复丢失的数据 • 注意:小心,不要将谱系图与 行动强制评估所有(上游) RDD 谱系图中的转换 拜访