我很想了解Spark如何实现容错。在他们的paper中,他们描述了他们如何为像地图这样相当简单的“狭义依赖性”做到这一点。但是,如果一个节点在像排序操作这样的广泛依赖之后崩溃,他们不会说明他们做了什么。我能找到的唯一的事情是这样的:广泛依赖关系的Spark容错
相比之下,具有广泛的依赖关系的谱系图,一个失败的节点可能会导致某些分区的损失从RDD的所有祖先,需要一个完整的重执行。
这对于理解发生的事情并不足够。
排序后,没有办法知道存储在崩溃节点上的数据来自何处,而无需存储一些附加信息。因此,如果在排序后发生崩溃,整个血统是否会重新执行,或者是否存在一些减少计算开销的机制?那么其他广泛的依赖关系呢?
回到我开始的例子:排序。如果通过排序R1创建的RDD R2的分区丢失,是否有任何方法可以避免对整个** RDD R1进行排序以获取R2的缺失分区? 或者您链接的例子:如果一个G的分区丢失了,那么究竟是什么**在这里重新计算?没有在groupBy和join中存储一些额外的信息,我想**所有**都必须重新计算? – Dezi
你是对的!但是spark会跟踪每个分区和RDD的整个谱系,因此不必重新执行所有未触及的分区。虽然排序的情况下,我怀疑。这就是Spark的缓存和持久性的地方。在发生故障时避免不必要的RDD重新计算。 – code
因此,Spark在分类后会缓存一些可用于恢复分区的数据吗?你知道我在哪里可以找到有关这方面的信息吗? – Dezi