【发布时间】: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