`
guoke456
  • 浏览: 9096 次
  • 性别: Icon_minigender_1
  • 来自: 重庆
社区版块
存档分类
最新评论

spark 缓存篇

 
阅读更多
spark数据集市RDD,这里有个很重要的特性是RDD可以选择存储起来让另外的action操作,下面是各种缓存级别


存储方式:RDD的持久化或缓存选项是通过persist()或cache()

备注:1.RDD中的数据具有容错性;  2.Shuffle操作是不需要指定cache()或者persist()的,会自动缓存rdd结果,避免因为节点故障等问题重新计算

RDD具有容错性,rdd只支持粗粒度转换(单个块上执行的单个操作,如是从哪个rdd-map过来的),如果出了问题,也不用全部重新执行,只需要读取之前是从哪个rdd转换过来的,怎么转换的,即可以将数据重新生成----------所以这种方式也成为“血统(Lineage)”容错
RDD的这种容错分为窄依赖和宽依赖,窄依赖效率高,主要是针对父rdd只有一个的情况(Transformation)
宽依赖父RDD来自很多个片,需要重新计算
我的理解是涉及到shuffle操作的大部分都宽依赖,Transformation操作都是窄依赖


每一次action调用,Spark都会从最初的输入RDD开始,重新执行一遍所有的tranformation, 对于批处理任务,这样做固然没有问题,但是对于反复操作操作同一数据的交互式(interactive)任务, 重复执行相同的计算显得很低效。

Spark提供缓存API来解决这一问题,用户可以通过cache()或persist()方法,将中间计算结果缓存到内存或者硬盘,下次执行相同计算时,可直接读取缓存来提高效率。persist()和cache()的区别在于,persist()提供了更多的参数,来支持不同级别的缓存机制。


MEMORY_ONLY 默认选项,RDD的(分区)数据直接以Java对象的形式存储于JVM的内存中,如果内存空间不足,某些分区的数据将不会被缓存,需要在使用的时候根据世代信息重新计算。
MYMORY_AND_DISK RDD的数据直接以Java对象的形式存储于JVM的内存中,如果内存空间不中,某些分区的数据会被存储至磁盘,使用的时候从磁盘读取。
MEMORY_ONLY_SER RDD的数据(Java对象)序列化之后存储于JVM的内存中(一个分区的数据为内存中的一个字节数组),相比于MEMORY_ONLY能够有效节约内存空间(特别是使用一个快速序列化工具的情况下),但读取数据时需要更多的CPU开销;如果内存空间不足,处理方式与MEMORY_ONLY相同。
MEMORY_AND_DISK_SER 相比于MEMORY_ONLY_SER,在内存空间不足的情况下,将序列化之后的数据存储于磁盘。
DISK_ONLY 仅仅使用磁盘存储RDD的数据(未经序列化)。
"MEMORY_ONLY_2,
MEMORY_AND_DISK_2, etc." 以MEMORY_ONLY_2为例,MEMORY_ONLY_2相比于MEMORY_ONLY存储数据的方式是相同的,不同的是会将数据备份到集群中两个不同的节点,其余情况类似。
OFF_HEAP(experimental) RDD的数据序例化之后存储至Tachyon。相比于MEMORY_ONLY_SER,OFF_HEAP能够减少垃圾回收开销、使得Spark Executor更“小”更“轻”的同时可以共享内存;而且数据存储于Tachyon中,Spark集群节点故障并不会造成数据丢失,因此这种方式在“大”内存或多并发应用的场景下是很有吸引力的。需要注意的是,Tachyon并不直接包含于Spark的体系之内,需要选择合适的版本进行部署;它的数据是以“块”为单位进行管理的,这些块可以根据一定的算法被丢弃,且不会被重建。
分享到:
评论

相关推荐

    并行计算框架Spark的自适应缓存管理策略

    并行计算框架Spark缺乏有效缓存选择机制,不能自动识别并缓存高重用度数据;缓存替换算法采用LRU,度量方法不够细致,影响任务的执行效率.本文提出一种Spark框架自适应缓存管理策略(Self-Adaptive Cache Management,SACM...

    【Spark内核篇04】SparkShuffle解析1

    【Spark内核篇04】SparkShuffle解析1

    【SparkCore篇05】RDD缓存和checkpoint1

    (1)创建一个RDD (2)将RDD转换为携带当前时间戳不做缓存 (3)多次打印结果 (4)将RDD转换为携带当前时间戳并做缓存 (5)多次打印做了缓存的结果,

    【Spark调优篇04】Spark之JVM调优1

    【Spark调优篇04】Spark之JVM调优1

    Spark性能优化基础篇

    美团Spark性能优化基础篇,详细讲解Spark性能优化技术

    Spark-2.3.1源码解读

    Spark的缓存,变量,shuffle数据等清理及机制 Spark-submit关于参数及部署模式的部分解析 GroupByKey VS ReduceByKey OrderedRDDFunctions那些事 高效使用mappartitions standalone模式下executor调度策略 ...

    spark3.0入门到精通

    ├─Spark-day01 │ 01-[了解]-Spark发展历史和特点介绍.mp4 │ 03-[掌握]-Spark环境搭建-Standalone集群模式.mp4 ...│ 10-[掌握]-RDD的缓存-持久化.mp4 │ 15-[了解]-外部数据源-操作JDBC-读.mp4

    基于spark的大数据论文资料

    本资料是集合20篇知网被引最高的基于spark的大数据论文,包括大数据Spark技术研究_刘峰波、大数据下基于Spark的电商实时推荐系统的设计与实现_岑凯伦、基于Spark的Apriori算法的改进_牛海玲、基于Spark的大数据混合...

    【Spark内核篇05】Spark内存管理1

    1. Spark 在代码中 new 一个对象实例 2. JVM 从堆内内存分配空间,创建对象并返回对象引用 3. Spark 保存该对象的引用,记录该对象占用的

    Spark性能优化指南——高级篇

    Spark性能优化指南——高级篇 Spark性能优化指南——高级篇

    Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql),总结的很全面.zip

    Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql),总结的很全面。 Spark零基础思维导图(内含spark-core ,spark-streaming,spark-sql)。 Spark零基础思维导图(内含spark-core ,spark-streaming,...

    【Spark内核篇02】Spark模式运行机制1

    (1)执行脚本提交任务,实际是启动一个SparkSubmit的JVM进程 (2)SparkSubmit类中的main方法反射调用Client的main方法 (3

    【Spark调优篇03】Spark之Shuffle调优1

    思考学习的深度Spark之Shuffle调优调优一:调节map端缓冲区大小在Spark任务运行过程中,如果shuffle的map端处理的数据量比较大,但是map

    【SparkStreaming篇02】SparkStreaming之Dstream创建1

    通过SparkStream创建Dstream,计算WordCount代码实现//1.初始化Spark配置信息val conf = new SparkConf()

    Spark 2.0.2 Spark 2.2 中文文档 本资源为网页,不是PDF

    Apache Spark 2.0.2 中文文档 Spark 概述 编程指南 快速入门 Spark 编程指南 概述 Spark 依赖 Spark 的初始化 Shell 的使用 弹性分布式数据集(RDDS) 并行集合 外部数据集 RDD 操作 RDD 持久化 共享...

    【Spark调优篇01】Spark之常规性能调优1

    第一种是Spark Standalone模式,你在提交任务前,一定知道或者可以从运维部门获取到你可以 第二种是Spark Yarn模式,由于Yarn使用资源队列

    大数据Spark企业级实战

    《大数据Spark企业级实战》详细解析了企业级Spark开发所需的几乎所有技术内容,涵盖Spark的架构设计、Spark的集群搭建、Spark内核的解析、Spark SQL、MLLib、GraphX、Spark Streaming、Tachyon、SparkR、Spark多语言...

    Spark 入门实战系列

    Spark 入门实战系列,适合初学者,文档包括十部分内容,质量很好,为了感谢文档作者,也为了帮助更多的人入门,传播作者的心血,特此友情转贴: 1.Spark及其生态圈简介.pdf 2.Spark编译与部署(上)--基础环境搭建....

    Spark性能优化指南—高级篇

    美团Spark性能优化高级篇,详细讲解Spark性能优化技术,高端

    Spark和TiDB (Spark on TiDB)

    SparkTI (Spark on TiDB)是TiDB基于Apache Spark的独立于原生系统的计算引擎。它将Spark和TiDB深度集成,在原有MySQL Workload之外借助Spark支持了更多样的用户场景和API。这个项目在SparkSQL和Catalyst引擎之外实现...

Global site tag (gtag.js) - Google Analytics