CacheManager原理:
1.RDD调用Iterator()方法,计算当前task要计算出来的partition。
2.如果RDD之前持久化过,StorageLevel就不为NONE,就会用CacheManager读取持久化过的数据。
3.如果RDD没有持久化过,就会从RDD的父RDD,来执行自定义的算子计算新的RDD的partition数据。
4.BlockManager尝试从本地读取数据(getLocal()),如果本地没有,尝试从远程获取数据(getRemote())。
5.有些时候虽然RDD持久化过,但是就是读取不到数据,就会尝试读取之前checkpoint的数据,如果checkpoint数据也没读取到,就会重新计算一份。由于此时RDD设置过持久化级别,所以计算完的数据会用BlockManager持久化一次。