第40课: CacheManager彻底解密:CacheManager运行原理流程图和源码详解
CacheManager管理是缓存,而缓存可以是基于内存的缓存,也可以是基于磁盘的缓存。CacheManager需要通过BlockManager来操作数据。
Task发生计算的时候要调用RDD的compute进行计算。我们看一下MapPartitionsRDD的compute方法:
MapPartitionsRDD的源码:
1. private[spark] class MapPartitionsRDD[U:ClassTag, T: ClassTag](
2. var prev: RDD[T],
3. f: (TaskContext, Int, Iterator[T]) =>Iterator[U], // (TaskContext, partitionindex, iterator)
4. preservesPartitioning: Boolean = false)
5. extends RDD[U](prev) {
6.
7. override val partitioner = if(preservesPartitioning) firstParent[T].partitioner else None
8.
9. override def getPartitions: Array[Partition]= firstParent[T].partitions
10.
11. override def compute(split: Partition,context: TaskConte