上QQ阅读APP看书,第一时间看更新
2.5.6 容错机制
iRDD的容错处理主要采用Spark RDD的容错技术——重新计算与设置检查点。其基本思想如下:
采用世系记录iRDD之间的继承关系。如果在某个数据处理过程中出现错误,可以根据世系进行容错恢复。
具体容错技术根据世系中记录的iRDD之间的继承关系来决定。正如2.5.2节中讨论的,iRDD之间的继承关系有两种:宽依赖和窄依赖。
如果是窄依赖,其故障恢复相对简单。当子iRDD的计算失败(如对应分区数据丢失)时,只需要重新计算其父iRDD即可,不必重新计算其他的iRDD。可见,窄依赖中的iRDD恢复计算的开销较小。
如果是宽依赖,其故障恢复相对复杂。当子iRDD的计算失败(如对应分区数据丢失)时,从理论上说应重复计算其每个父iRDD的每个分区的所有数据。但这种容错机制的计算成本过高,而且存在大量的冗余计算。因此,可以考虑引入检查点技术来降低宽依赖中的iRDD容错成本。
当然,本节讨论的容错机制与2.5.5节讨论的性能提升之间具有内在联系,二者不可完全分离。为了综合解决性能提升和容错处理问题,对于以下两种特殊情况,应分别采用检查点技术和缓存技术。
•重新计算iRDD。当世系很长时,处于世系尾部的iRDD所需的计算成本会很大,需要引入检查点技术。所谓检查点技术是指通过将iRDD写入硬盘的方式创建检查点,并优先读取检查点。这种方式可以避免重新计算所带来的计算成本过高问题。
•频繁访问某个iRDD。当某个iRDD被后续操作多次访问时,应考虑将其存入缓存,避免为了进行容错处理而重复计算该iRDD导致的计算成本的提升。