前景:Task ——》 RDD(iterator方法) ——》计算当前Task要计算出来的那个partition
情景1:
该RDD是持久化过的:那么StorageLevel肯定不是NONE,则会使用CacheManager去帮助我们直接读取持久化过的数据
情景1.1:BlockManager,先尝试从本地读取(getLocal),或从远程获取(getRemote)
情景1.2:因为服务器故障灯原因导致数据丢失时,会尝试读取之前checkpoint过的数据,如果依然没有读取,就回重新计算一份之后,使用BlockManager持久化一次。
情景1.2.1:如果持久化级别没有指定内存级别,直接用BlockManager的doPut()写入磁盘中
情景1.2.2:如果指定了内存级别,那么优先保存到内存中,会调用MemoryStore的unrollSafely()方法,尝试安全的将数据保存到内存中,如果内存不够,则调用ensureFreeSpace()方法,整理内存之后,在写入内存
情景2:
该RDD没进行持久化,就会从RDD的父RDD来执行我们定义的算子来计算新的RDD的partition的数据
二:图