Checkpoint
Dependency is cleaned up in markCheckpointed.
SparkContext.runJob will invoke rdd.doCheckpoint() at the end, which will call writeRDDToCheckpointDirectory eventually to do the real work. Note that all the bookkeeping work is done in the driver, so that the meata info is kept.