更新时间:2017-09-01 来源:黑马程序员云计算大数据培训学院 浏览量:
三,对公用的RDD进行持久化
持久化场景:对于一个RDD被多次引用到,并且这个RDD计算过程复杂,计算时间特别耗 时,那么就可以对这个RDD进行持久化
如何进行持久化:调用RDD.persist(), 或者RDD.cache()
【注意】cache方法的底层就是调用persist方法
如果对RDD做持久化,默认持久化级别是StorageLevel.MEMEORY_ONLY ,也就是持久化到内存中去,这种持久化级别效率是最快的,但是由于是纯Java对象保存到内存中,那么内存可能保存的数据就会较少
如果当我们集群资源有限时,那么我们可以采用MEMORY_ONLY_SER,也就是将Java对象进行序列化之后再持久化到内存中去,这种持久化的好处是能够持久化更多的数据到内存中,但是持久化时需要序列化,取出来又需要反序列化这一过程,性能相对于MEMORY_ONLY这种持久化要稍微弱点,但是还是比较高效的
如何选择RDD持久化策略
Spark提供的多种持久化级别,主要是在CPU和内存之间进行取舍,下面是一些通用的持久化级别的选择建议:
1、有限使用MEMORY_ONLY,如果可以缓存所有数据的话,那么就使用这种策略,因为春内村速度最快,而且没有序列化,不需要消耗CPU进行反序列化操作
2、如果MEMORY_ONLY策略,无法存储所有的数据的话,那么使用MEMORY_ONLY_SER,将数据进行序列化存储,纯内存操作还是非常快的,只是要消耗CPU进行反序列化
3、如果需要进行快速的失败恢复,那么就选择带后缀为_2的策略,进行数据的备份,这样在失败时,就不需要重新计算了
4、能不适用DISK相关的策略,就不要使用,有的时候,从磁盘读取数据还不如重新计算一次