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等系统。
是一个内存分布式文件系统。它是介于计算层和存储层之间的,我们可以简单的理解为存储层在内存内的一个缓存系统。它是一个开源的系统,是一个以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 具体操作请查看后续博客。