我读过“弹性分布式数据集--内存集群计算的容错抽象”这篇论文。作者说,如果一个分区丢失,我们可以使用沿袭来重建它。但是,现在内存中不存在原始的RDD。那么,将再次加载基本RDD以重新构建丢失的RDD分区吗?
发布于 2015-08-03 02:25:06
是的,正如您提到的,如果用于创建分区的RDD不再在内存中,则必须再次从磁盘加载并重新计算。如果用于创建当前分区的原始RDD也不存在(无论是在内存中还是在磁盘上),那么Spark必须再退一步,重新计算以前的RDD。在最坏的情况下,星火将不得不一路回到原始数据。
如果您有较长的沿袭链,如上面描述的可能意味着长重计算时间的最坏情况,那么您应该考虑使用检查点,它将中间结果存储在可靠的存储中(如HDFS),这将阻止Spark一路返回原始数据源,转而使用校验点数据。
@评论:我很难找到任何官方的参考资料,但从他们的代码库中我只记得那些丢失的部分数据。
https://stackoverflow.com/questions/31778497
复制相似问题