计算rdd的某个分区是从RDD的iterator()方法开始的,我们从这个方法进入
然后我们进入getOrCompute()方法中看看是如何进行读取数据或计算的
getOrElseUpdate()方方法的返回值类型如果是blockResult说明blockManager在本地或远程读取到了数据,或者没有读取到数据调用传入的方法computeOrReadCheckpoint重新计算(或读取checkpoint)得到了数据并成功写入缓存(磁盘或内存);如果返回值类型是iterator,说明没有读取到数据,计算得到的数据内存放不下只能返回iterator;
我们进入getOrElseUpdate()方法中
现在我们进入doPutIterator()方法中,看看是如何将计算的数据放入缓存的
取得取得了info之后,继续向下走
进行到这里位置数据已经得到了(iterator),然后会new MapStatus并发送给Master来更新状态,最后会判断存储级别是否要去副本,如果设置了_2之类的级别,就会通过
blockTransferService进行异步发