spark学习系列——8 RDD持久化操作

1、概念

RDD持久化
将数据通过操作持久化(或缓存)在内存中是Spark的重要能力之一。当你缓存了一个RDD,每个节点都缓存了RDD的所有分区。这样就可以在内存中进行计算。这样可以使以后在RDD上的动作更快(通常可以提高10倍)。
你可以对希望缓存的RDD通过使用persist或cache方法进行标记。它通过动作操作第一次在RDD上进行计算后,它就会被缓存在节点上的内存中。Spark的缓存具有容错性,如果RDD的某一分区丢失,它会自动使用最初创建RDD时的转换操作进行重新计算。

另外,RDD可以被持久化成不同的级别。比如,可以允许你存储在磁盘,内存,甚至是序列化的Java对象(节省空间),备份在不同的节点上,或者存储在基于内存的文件系统Tachyon上。通过向persist()方法传递StorageLevel对象来设置。cache方法是使用默认级别StorageLevel.MEMORY_ONLY的方法。

2、如何选择默认级别

1:优先选择MEMORY_ONLY,如果可以用内存缓存所有的数据,那么也就意味着我的计算是纯内存的计算,速度当然快。
2:MEMORY_ONLY 缓存不了所有的数据,MEMORY_ONLY_SER 把数据实现序列化然后进行存储。这样也是纯内存操作,速度也快,只不过需要耗费一点cpu资源需要反序列化。
3:可以选用带2这种方式。恢复速度的时候可以使用备份。不需要重新计算

4:不使用DISK,有时候从磁盘读,还不如从新计算一次。

3、关于tachyon(Alluxio)

1:什么是tachyon
是一个内存分布式文件系统。它是介于计算层和存储层之间的,我们可以简单的理解为存储层在内存内的一个缓存系统。它是一个开源的系统,是一个以JVM为base的系统。
http://www.alluxio.org/
2:为什么会出现tachyon
发现已内存去替换磁盘,就可以明显的减小延时,所以涌现出来很多基于内存的计算工具,比较出名的就是咱们的讲的spark这个计算框架。
1 spark运行已JVM为基础,所以spark的任务会把数据存入JVM的堆中,随着计算的迭代,JVM堆中存放的数据量迅速增大,对于spark而言,spark的计算引擎和存储引擎处在同一个JVM中,所以会有重复的GC方面的开销。这样就增大了系统的延时。
2:当JVM崩溃时,缓存在JVM堆中的数据也会消失,这个时候spark不得不根据RDD的血缘关系重新计算数据。
3:如果spark需要其他的框架的共享数据,比如就是hadoop的Mapreduce,这个时候就必须通过第三方来共享,比如借助HDFS,那么这样的话,就需要额外的开销,借助的是HDFS,那么就需要磁盘IO的开销。
因为我们基于内存的分布式计算框架有以上的问题,那么就促使了内存分布式文件系统的诞生,比如tachyon。Tachyon可以解决spark的什么问题呢?
如果我们把数据存放到tachyon上面:
1:减少Spark GC的开销。
2:当spark 的JVM崩溃的时候,存放在tachyon上的数据不受影响。
3:spark如果要想跟被的计算工具共享数据,只要通过tachyon的Client就可以做到了。并且延迟远低于HDFS等系统。
Alluxio 具体操作请查看后续博客。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值