【问题标题】:How Rdd persistence Works to support fault toleranceRdd 持久性如何支持容错
【发布时间】:2018-07-09 16:32:09
【问题描述】:

我想了解,spark 的 rdd Persistence 如何帮助容错。

假设我的集群中有 3 个节点,即 N1、N2、N3。我正在以 Rdd1->Rdd2->Rdd3 的形式执行 spark 任务(转换映射)。我坚持 rdd2(在 rdd3 计数上它是第一次成功)。在持久性方面,假设它有 6 个分区,我的每个节点都有 2 个分区,在持久性方面将它们放在 RAM(内存中)中。

现在第二次调用 Rdd3.count() 时,N3 下降,在这种情况下 Spark 如何计算 Rdd3 计数?

根据文档:“Spark 的缓存是容错的——如果 RDD 的任何分区丢失,它将使用最初创建它的转换自动重新计算。”

现在由于 N3 失败,spark 将尝试从 Rdd2 重新创建 Rdd3,如 Rdd3 = rdd2.map() 。但据我了解,如果 N3 失败,那么 N3 上 Rdd2 的所有内存数据/分区也将丢失(N3 中 Rdd2 的 2 个数据分区)。

即使 spark 也尝试重新创建 Rdd2(Rdd1.map),那么它必须从头开始重新计算(因为 id Rdd1 会保持 bben 然后 Rdd1 在 N3 上的分区 丢失)。它可能适用于所有以前的 Rdd。当一个节点宕机时,该节点上任何先前 Rdd 的数据跟踪也将丢失,所以它总是从头开始重新计算(加载文件)吗?

请多指教,谢谢。 ****请不要投反对票****

【问题讨论】:

    标签: apache-spark pyspark


    【解决方案1】:

    我想了解,spark 的 rdd Persistence 如何帮助容错。

    Spark 的缓存不会增强其容错能力。而是 Spark RDD,无论是缓存的还是非缓存的,都是容错的。

    当一个节点宕机时,该节点上任何以前的RDD的数据跟踪也会丢失,所以它总是从头开始重新计算(加载文件)吗?

    是的。 Spark 将根据需要返回 RDD 的血统以重新创建丢失的数据。理论上,以前缓存的前驱 RDD 可用于重新创建分区。但是,数据不会在节点之间进行不必要的混洗,因此丢失的分区数据不会在其他节点上。因此,重新计算 RDD 几乎肯定意味着从头开始重新计算并重新加载原始数据。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-02-24
      • 1970-01-01
      • 2011-04-21
      • 1970-01-01
      • 2017-01-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多