RDD的持久化:

Rdd.cache()
Rdd.persist(StorageLevel.MEMORY_ONLY)

persist方式可选取以下不同方式持久化

MEMORY_AND_DISK    #如果内存不够再存磁盘
DISK_ONLY
MEMORY_ONLY_SER #存数据时候实现序列化 可节省内存,但是读取时要反序列化,耗CPU,衡量
MEMORY_ONLY_2 #每份数据存两份
OFF_HEAP

选取方案

1、优先选择MEMORY_ONLY,如果可以用内存缓存所有数据,那么久意味着我们的计算是纯内存的计算,速度当然快。

2、MEMORY_ONLY缓存不了所有的数据,MEMORY_ONLY_SER 把数据实现序列化进行存储,节省内存。这样也是纯内存操作,速度也快,只不过需要耗费CPU资源反序列化。

3、可以使用带_2这种方式,恢复的时候可以使用备份,不需要重新计算。

4、能不适用DISK的,就不适用DISK,有时候从磁盘读,还不如重新计算一次

其他:

1、什么是tachyon?
tachyon是一个内存分布式文件系统,hdfs是基于磁盘,他是介于计算层和存储层之间的,我们可以简单的理解为存储层在内存内的一个缓存系统 ,是一个开源系统,是一个以JVM为基础的系统
2、为什么会出现tachyon?
发现以内存替换磁盘,就可以明显的减少延时,所以就涌现出来很多基于内存的计算工具,比较出名的就是spark这个计算框架

1、Spark运行以JVM为基础,所以spark的任务会把数据存入JVM的堆中,随着计算的迭代,JVM堆中存放的数据量迅速增大,对于spark而言,spark计算引擎和存储引擎处在同一个JVM中,所以会有重复的GC方面的开销,这样就增大了系统的延时。

2、当JVM崩溃时,缓存在JVM的数据也会消失,这个时候spark不得不根据RDD的血缘关系重新计算数据

3、如果spark需要和其他框架共享数据,比如hadoop的MapReduce,这个时候就必须通过第三方来共享,比如借助hdfs,那么这样的话,就需要额外的开销(磁盘IO)。

因为我们基于内存的分布式计算框架有以上的问题,那么就促使内存分布式文件系统的诞生,比如tachyon,tachyon可以解决什么问题?

如果我们把数据存到tachyon:
1、减少spark GC的开销。
2、当spark的JVM崩溃时,存放在tachyon上的数据不受影响。
3、Spark如果要想跟别的计算工具共享数据,只要通过tachyon的Client就可以做到了,并且延迟远低于hdfs等系统