首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Spark RDD中的持久化

持久化在早期被称作缓存(cache),但缓存一般指将内容放在内存中。虽然持久化操作在绝大部分情况下都是将RDD缓存在内存中,但一般都会在内存不够时用磁盘顶上去(比操作系统默认的磁盘交换性能高很多)。...所以,现在Spark使用持久化(persistence)这一更广泛的名称。 如果一个RDD不止一次被用到,那么就可以持久化它,这样可以大幅提升程序的性能,甚至达10倍以上。...默认情况下,RDD只使用一次,用完即扔,再次使用时需要重新计算得到,而持久化操作避免了这里的重复计算,实际测试也显示持久化对性能提升明显,这也是Spark刚出现时被人称为内存计算的原因。...持久化的方法是调用persist()函数,除了持久化至内存中,还可以在persist()中指定storage level参数使用其他的类型。...,总共两份副本,可提升可用性 此外,RDD.unpersist()方法可以删除持久化。

74530

spark中的rdd的持久化

transfrom并不引发真正的rdd计算,action才会引发真正的rdd计算。 rdd的持久化是便于rdd计算的重复使用。...rdd的持久化操作有cache()和presist()函数这两种方式。 ---- Spark最重要的一个功能,就是在不同操作间,持久化(或缓存)一个数据集在内存中。...缓存是用Spark构建迭代算法的关键。你可以用persist()或cache()方法来标记一个要被持久化的RDD,然后一旦首次被一个动作(Action)触发计算,它将会被保留在计算结点的内存中并重用。...当需要删除被持久化的RDD,可以用unpersistRDD()来完成该工作。...此外,每一个RDD都可以用不同的保存级别进行保存,从而允许你持久化数据集在硬盘,或者在内存作为序列化的Java对象(节省空间),甚至于跨结点复制。

1.1K80
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    Spark Core快速入门系列(8) | RDD 的持久化

    RDD 数据的持久化   每个 job 都会重新进行计算, 在有些情况下是没有必要, 如何解决这个问题呢?   Spark 一个重要能力就是可以持久化数据集在内存中....当我们持久化一个 RDD 时, 每个节点都会存储他在内存中计算的那些分区, 然后在其他的 action 中可以重用这些数据. 这个特性会让将来的 action 计算起来更快(通常块 10 倍)....可以使用方法persist()或者cache()来持久化一个 RDD. 在第一个 action 会计算这个 RDD, 然后把结果的存储到他的节点的内存中....RDD 的各个 Partition 是相对独立的, 因此只需要计算丢失的部分即可, 并不需要重算全部 Partition   另外, 允许我们对持久化的 RDD 使用不同的存储级别.   ...有一点需要说明的是, 即使我们不手动设置持久化, Spark 也会自动的对一些 shuffle 操作的中间数据做持久化操作(比如: reduceByKey).

    30810

    2021年大数据Spark(十七):Spark Core的RDD持久化

    ---- RDD 持久化 引入 在实际开发中某些RDD的计算或转换可能会比较耗费时间,如果这些RDD后续还会频繁的被使用到,那么可以将这些RDD进行持久化/缓存,这样下次再使用到的时候就不用再重新计算了...API 缓存/持久化函数 可以将RDD数据直接缓存到内存中,函数声明如下: 但是实际项目中,不会直接使用上述的缓存函数,RDD数据量往往很多,内存放不下的。...在实际的项目中缓存RDD数据时,往往使用如下函数,依据具体的业务和数据量,指定缓存的级别 缓存/持久化级别 在Spark框架中对数据缓存可以指定不同的级别,对于开发来说至关重要,如下所示: 持久化级别...演示 // 启动集群和spark-shell /export/servers/spark/sbin/start-all.sh // 将一个RDD持久化,后续操作该RDD就可以直接从缓存中拿 val...rdd2已经持久化到内存中了 总结:何时使用缓存/持久化 在实际项目开发中,什么时候缓存RDD数据,最好呢???

    39130

    Hadoop与Spark等大数据框架介绍

    除此之外,成本较高,高端服务器常常非常昂贵,几百万甚至上千万一台,一般的小公司承受不起这样高昂的成本。...RDD持久化 默认情况下,每一个转换过的RDD都会在它之上执行一个动作时被重新计算。如果RDD只被使用一次或者很少次,不需要持久化。如果RDD被重复使用或者计算其代价很高,才考虑持久化。...另外,shuffle后生成的RDD尽量持久化,因为shuffle代价太高。RDD被缓存后,Spark将会在集群中,保存相关元数据,下次查询这个RDD时,它将能更快速访问,不需要计算。...如果持久化无谓的RDD,会浪费内存(或硬盘)空间,反而降低系统整体性能 RDD依赖关系 RDD只能基于在稳定物理存储中的数据集和其他已有的RDD上执行确定性操作来创建。...Shuffle数据必须持久化磁盘,不能缓存在内存。

    1.5K10

    SparkStreaming学习笔记

    2:SparkStreaming的内部结构:本质是一个个的RDD(RDD其实是离散流,不连续)         (*)问题:Spark Streaming是如何处理连续的数据         Spark...即使保存数据为序列化形态会增加序列化/反序列化的开销,但是可以明显的减少垃圾回收的暂停。...Clearing persistent RDDs:默认情况下,通过Spark内置策略(LUR),Spark Streaming生成的持久化RDD将会从内存中清理掉。...如果spark.cleaner.ttl已经设置了,比这个时间存在更老的持久化RDD将会被定时的清理掉。正如前面提到的那样,这个值需要根据Spark Streaming应用程序的操作小心设置。...然而,可以设置配置选项spark.streaming.unpersist为true来更智能的去持久化(unpersist)RDD。这个配置使系统找出那些不需要经常保有的RDD,然后去持久化它们。

    1.1K20

    Spark入门指南:从基础概念到实践应用全解析

    而且Spark的持久化机制还是自动容错的,如果持久化的RDD的任何partition丢失了,那么Spark会自动通过其源RDD,使用transformation操作重新计算该partition。...,1)).reduceByKey(_+_)rdd2.cache //缓存/持久化rdd2.sortBy(_._2,false).collect//触发action,会去读取HDFS的文件,rdd2会真正执行持久化...rdd2.sortBy(_._2,false).collect//触发action,会去读缓存中的数据,执行速度会比之前快,因为rdd2已经持久化到内存中了需要注意的是,在触发action的时候,才会去执行持久化...),将数据持久化到内存中。...对于上述任意一种持久化策略,如果加上后缀_2,代表的是将每个持久化的数据,都复制一份副本,并将副本保存到其他节点上。这种基于副本的持久化机制主要用于进行容错。

    2.9K42

    Spark Core快速入门系列(9) | RDD缓存和设置检查点

    在存储级别的末尾加上“_2”来把持久化数据存为两份 ?   缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。...设置检查点(checkpoint)   Spark 中对于数据的保存除了持久化操作之外,还提供了一种检查点的机制,检查点(本质是通过将RDD写入Disk做检查点)是为了通过 Lineage 做容错的辅助...持久化和checkpoint的区别 ? 持久化只是将数据保存在 BlockManager 中,而 RDD 的 Lineage 是不变的。...注意: 默认情况下,如果某个 RDD 没有持久化,但是设置了checkpoint,会存在问题....所以,建议对 checkpoint()的 RDD 使用持久化, 这样 RDD 只需要计算一次就可以了.   本次的分享就到这里了

    80620

    Spark学习笔记

    它的集群由一个主服务器和多个从服务器组成。 Spark架构依赖于两个抽象: 弹性分布式数据集(RDD) 有向无环图(DAG) ?...当我们在代码中执行了cache/persist等持久化操作时,根据我们选择的持久化级别的不同,每个Task计算出来的数据也会保存到Executor进程的内存或者所在节点的磁盘文件中。  ...,进行聚合等操作时使用,默认也是占Executor总内存的20%;第三块是让RDD持久化时使用,默认占Executor总内存的60%。  ...与 MapReduce 不同的是,一个 应用 的进程(我们称之为 Executor),会一直在集群上运行,即使当时没有 Job 在上面运行。   ...并根据是否发生 shuffle 划分 DAG 的 stage. RDD RDD(弹性分布式数据集)是Spark的核心抽象。它是一组元素,在集群的节点之间进行分区,以便我们可以对其执行各种并行操作。

    1.1K10

    RDD原理与基本操作 | Spark,从入门到精通

    Storage Level 是 RDD 持久化的存储级别,RDD 持久化可以调用两种方法:cache 和 persist:persist 方法可以自由的设置存储级别,默认是持久化到内存;cache 方法是将...RDD 持久化到内存,cache 的内部实际上是调用了persist 方法,由于没有开放存储级别的参数设置,所以是直接持久化到内存。...Checkpoint 是 Spark 提供的一种缓存机制,当需要计算依赖链非常长又想避免重新计算之前的 RDD 时,可以对 RDD 做 Checkpoint 处理,检查 RDD 是否被物化或计算,并将结果持久化到磁盘或...:persist 虽然可以将 RDD 的 partition 持久化到磁盘,但一旦作业执行结束,被 cache 到磁盘上的 RDD 会被清空;而 checkpoint 将 RDD 持久化到 HDFS 或本地文件夹...*变换序列指每个 RDD 都包含了它是如何由其他 RDD 变换过来的以及如何重建某一块数据的信息。 因此 RDD 的容错机制又称「血统」容错。

    4.9K20

    Spark分布式内存计算框架

    尽管创建 Spark 是为了支持分布式数据集上的迭代作业,但是实际上它是对 Hadoop 的补充,可以在 Hadoop 文件系统中并行运行。通过名为 Mesos 的第三方集群框架可以支持此行为。...、重新计算丢失分区、无需回滚系统、重算过程在不同节点之间并行、只记录粗粒度的操作 (2)中间结果持久化到内存,数据在内存中的多个RDD操作之间进行传递,避免了不必要的读写磁盘开销 (3)存放的数据可以是...Java对象,避免了不必要的对象序列化和反序列化 (四)RDD 的持久化 由于Spark RDD是惰性求值的,因此,当需要多次使用同一个转换完的RDD时,Spark会在每一次调用行动操作时去重新进行...为了避免多次计算同一个RDD,可以用persist()或cache()方法来标记一个需要被持久化的RDD,一旦首次被一个行动(Action)触发计算,它将会被保留在计算结点的内存中并重用。...如果数据需要复用,可以通过cache操作对数据进行持久化操作,缓存到内存中; 输出:当Spark程序运行结束后,系统会将最终的数据存储到分布式存储系统中或Scala数据集合中。

    10210

    《从0到1学习spark》--手撕parallelize源码

    /79666170 关于spark withScope的源码的含义,可以具体参考网上的资料 withScope是最近的发现版中新增加的一个模块,它是用来做DAG可视化的(DAG visualization...于是为了在sparkUI中能展示更多的信息。所以把所有创建的RDD的方法都包裹起来,同时用RDDOperationScope 记录 RDD 的操作历史和关联,就能达成目标 ?...这里主要的执行方法就是RDD.scala里面的内容了,可以看到这里涉及有checkpoint的内容 这个其实就是RDD的安全检查点,所谓的安全检查点其实是将系统运行的内存数据结构和状态持久化到磁盘当中,...这里有几个地方可以注意一下,第一个地方是指定了持久化级别的 第二个看注释是用于创建RDD的,然后这里sc.getCallSite()这个方法是和堆栈有关的,这部分内容在创建sparkContext中也有...那么创建完RDD之后,这里数据在哪里呢? ? 就是在这个body里面了 总结 今天小强介绍了RDD通过parallelize方法并行化创建的源码执行流程,欢迎大家在后台拍砖,让我们一起学习spark。

    94020

    Apache Spark 2.2.0 中文文档 - Spark Streaming 编程指南 | ApacheCN

    初始化 StreamingContext 为了初始化一个 Spark Streaming 程序, 一个 StreamingContext 对象必须要被创建出来,它是所有的 Spark Streaming...此错误可能会显示为序列化错误(连接对象不可序列化), 初始化错误(连接对象需要在 worker 初始化)等. 正确的解决方案是在 worker 创建连接对象....除此之外, 对于更大类的机器学习算法, 您可以离线学习一个学习模型(即使用历史数据), 然后将该模型在线应用于流数据.有关详细信息, 请参阅 MLlib指南....请注意, 与 RDD 不同, DStreams 的默认持久性级别将数据序列化在内存中. 这在 性能调优 部分进一步讨论. 有关不同持久性级别的更多信息, 请参见 Spark编程指南....Spark Core 默认情况不同, 通过流式计算生成的持久化 RDD 将以 StorageLevel.MEMORY_ONLY_SER (即序列化), 以最小化 GC 开销.

    2.2K90

    Spark 以及 spark streaming 核心原理及实践

    Spark引进了弹性分布式数据集RDD (Resilient Distributed Dataset) 的抽象,它是分布在一组节点中的只读对象集合,这些集合是弹性的,如果数据集一部分丢失,则可以根据“血统...由于不要求数据有序,shuffle write 的任务很简单:将数据 partition 好,并持久化。...之所以要持久化,一方面是要减少内存存储空间压力,另一方面也是为了 fault-tolerance。...只有action执行时,rdd1才会开始创建并进行后续的rdd变换计算。 cache其实也是调用的persist持久化函数,只是选择的持久化级别为MEMORY_ONLY。...persist支持的RDD持久化级别如下: 需要注意的问题: Cache或shuffle场景序列化时, spark序列化不支持protobuf message,需要java 可以serializable

    4.7K40

    【万字长文】Spark最全知识点整理(内含脑图)

    ,mapreduce的容错只能重新计算; Spark采用CheckPoint机制,对于特别复杂的Spark应用,会出现某个反复使用的RDD,即使之前持久化过但由于节点的故障导致数据丢失了。...资源参数的调优,没有一个固定的值,需要同学们根据自己的实际情况(包括Spark作业中的shuffle操作数量、RDD持久化操作数量以及spark web ui中显示的作业gc情况),同时参考以下内容给出的原理以及调优建议...也就是说,默认Executor 60%的内存,可以用来保存持久化的RDD数据。根据你选择的不同的持久化策略,如果内存不够时,可能数据就不会持久化,或者数据会写入磁盘。...参数调优建议:如果Spark作业中,有较多的RDD持久化操作,该参数的值可以适当提高一些,保证持久化的数据能够容纳在内存中。避免内存不够缓存所有的数据,导致数据只能写入磁盘中,降低了性能。...如下图所示: 对上图中的RDD计算架构进行修改,得到如下图所示的优化结果: 三、对多次使用的RDD进行持久化 对多次使用的RDD进行持久化。

    2.8K12

    一篇并不起眼的Spark面试题

    hadoop和spark的相同点和不同点? RDD持久化原理? checkpoint检查点机制? checkpoint和持久化机制的区别? RDD机制理解吗?...RDD持久化原理? spark非常重要的一个功能特性就是可以将RDD持久化在内存中。 调用cache()和persist()方法即可。...原因:对于特别复杂的Spark应用,会出现某个反复使用的RDD,即使之前持久化过但由于节点的故障导致数据丢失了,没有容错机制,所以需要重新计算一次数据。...之后在RDD所处的job运行结束之后,会启动一个单独的job,来将checkpoint过的RDD数据写入之前设置的文件系统,进行高可用、容错的类持久化操作。...7. checkpoint和持久化机制的区别? 最主要的区别在于持久化只是将数据保存在BlockManager中,但是RDD的lineage(血缘关系,依赖关系)是不变的。

    99121

    Spark shuffle读操作

    计算或者读取RDD org.apache.spark.rdd.RDD#iterator源码如下,它是一个final方法,只在此有实现,子类不允许重实现这个方法: ?...我们逐一来看其依赖方法: org.apache.spark.rdd.RDD#getOrCompute 源码如下: ? 首先先通过Spark底层的存储系统获取 block。...checkpoint来获取RDD的分区信息,并且将根据其持久化级别(即StorageLevel)将数据做持久化。...关于持久化的内容 可以参考 Spark 源码分析系列 中的 Spark存储部分 做深入了解。 通过父RDD的checkpoint 其核心源码如下: ?...反序列化输入流 核心方法如下: ? 其依赖方法 scala.collection.Iterator#flatMap 源码如下: ? 可见,即使是在这里,数据并没有全部落到内存中。

    88720

    一篇并不起眼的Spark面试题

    hadoop和spark的相同点和不同点? RDD持久化原理? checkpoint检查点机制? checkpoint和持久化机制的区别? RDD机制理解吗?...RDD持久化原理? spark非常重要的一个功能特性就是可以将RDD持久化在内存中。 调用cache()和persist()方法即可。...原因:对于特别复杂的Spark应用,会出现某个反复使用的RDD,即使之前持久化过但由于节点的故障导致数据丢失了,没有容错机制,所以需要重新计算一次数据。...之后在RDD所处的job运行结束之后,会启动一个单独的job,来将checkpoint过的RDD数据写入之前设置的文件系统,进行高可用、容错的类持久化操作。...7. checkpoint和持久化机制的区别? 最主要的区别在于持久化只是将数据保存在BlockManager中,但是RDD的lineage(血缘关系,依赖关系)是不变的。

    4.8K30
    领券