许多人说:
Spark不会在hdfs中复制数据。
Spark在DAG图中安排操作.Spark构建RDD谱系。如果RDD丢失,可以在谱系图的帮助下重建它们。 因此不需要数据复制,因为可以从谱系图重新计算RDDS。
我的问题是:
如果节点出现故障,spark只会重新计算在此节点上丢失的RDD分区,但重新计算过程中所需的数据源来自何处?你的意思是它的父RDD在节点出现故障时仍然存在吗?如果丢失某些分区的RDD没有父RDD(如RDD来自火花流接收器)怎么办?
答案 0 :(得分:2)
如果我们在计算中失去某些东西怎么办?
有趣的是:只需记录微小的状态即可进行重新计算。
Need parent pointer, function applied, and a few other bits.
Log 10 KB per transform rather than re-output 1 TB -> 2 TB
子RDD是描述如何从父RDD计算RDD的元数据。阅读What is RDD dependency in Spark?
中的更多内容答案 1 :(得分:0)
如果节点发生故障,spark将仅重新计算在该节点上丢失的RDD分区,但是重新计算过程中所需的数据源从何而来?您是说节点发生故障时,其父RDD仍然存在吗?
核心思想是您可以使用沿袭来恢复丢失的RDD,因为RDD是
(来源:RDD paper, beginning of section 2.1)
如果某些RDD丢失了,您可以返回沿袭,直到达到某些RDD或仍可用的初始数据记录为止。
稳定存储中的数据跨多个节点复制,因此不太可能丢失。
据我所了解的Streaming Receivers来看,接收到的数据似乎也保存在稳定的存储中,因此其行为与其他任何数据源一样。