apache-spark - 如果一个分区丢失,我们可以使用lineage来重建它。是否会再次加载基础 RDD?

标签 apache-spark rdd

我阅读了论文“弹性分布式数据集一种用于内存集群计算的容错抽象”。作者说,如果一个分区丢失了,我们可以使用lineage来重建它。但是,原始 RDD 现在不存在于内存中。
那么是否会再次加载基础 RDD 来重建丢失的 RDD 分区?

最佳答案

是的,正如您提到的,如果用于创建分区的 RDD 不再在内存中,则必须再次从磁盘加载并重新计算。如果用于创建当前分区的原始 RDD 也不存在(既不在内存中也不在磁盘上),那么 Spark 将不得不再次返回并重新计算先前的 RDD。在最坏的情况下,Spark 将不得不一直返回到原始数据。

如果你有像上面描述的那样的长谱系链,作为最坏的情况可能意味着很长的重新计算时间,那么你应该考虑使用 checkpointing它将中间结果存储在可靠的存储(如 HDFS)中,这将阻止 Spark 一直返回到原始数据源并使用检查点数据。

@Comment:我在查找任何官方引用资料时遇到问题,但从我从他们的代码库中记得的内容来看,Spark 只能重新创建丢失的数据部分。

关于apache-spark - 如果一个分区丢失,我们可以使用lineage来重建它。是否会再次加载基础 RDD?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31778497/

相关文章:

apache-spark - Spark 2.3+ 使用 parquet.enable.dictionary?

apache-spark - Spark Countbykey() - 为什么作为一个 Action 来实现

r - SparkR 和软件包

python - 将 Python 脚本转换为能够在 Spark/Hadoop 中运行

scala - 如何优雅地终止 Spark 应用程序

apache-spark - Spark RDD 谱系存储在哪里?

hadoop - 如何基于弹性hadoop加入RDD

python - 如何在 PySpark 中获得不同的字典 RDD?

python - 通过键与 RDD 相交

apache-spark - 如何使用 Spark Scala 连接 3 个 RDD