Spark RDD Cache缓存使用详解

目录:

1.概述
2.缓存类型
3.如何选择缓存类型
4.移除缓存数据

1.概述

Spark的开发调优有一个原则,即对多次使用的RDD进行持久化。如果要对一个RDD进行持久化,只要对这个RDD调用cache()和persist()即可。

1.1 cache()方法表示:使用非序列化的方式将RDD的数据全部尝试持久化到内存中,cache()只是一个transformtion,是lazy的,必须通过一个action触发,才能真正的将该RDD cache到内存中。
1.2 persist()方法表示:手动选择持久化级别,并使用指定的方式进行持久化。
2.缓存类型
NONE :什么类型都不是
DISK_ONLY:磁盘
DISK_ONLY_2:磁盘;双副本
MEMORY_ONLY: 内存;反序列化;把RDD作为反序列化的方式存储,假如RDD的内容存不下,剩余的分区在以后需要时会重新计算,不会刷到磁盘上。
MEMORY_ONLY_2:内存;反序列化;双副本
MEMORY_ONLY_SER:内存;序列化;这种序列化方式,每一个partition以字节数据存储,好处是能带来更好的空间存储,但CPU耗费高
MEMORY_ONLY_SER_2 : 内存;序列化;双副本
MEMORY_AND_DISK:内存 + 磁盘;反序列化;双副本;RDD以反序列化的方式存内存,假如RDD的内容存不下,剩余的会存到磁盘
MEMORY_AND_DISK_2 : 内存 + 磁盘;反序列化;双副本
MEMORY_AND_DISK_SER:内存 + 磁盘;序列化  
MEMORY_AND_DISK_SER_2:内存 + 磁盘;序列化;双副本
*********** 序列化能有效减少存储空间,默认MEMORY_ONLY
3.如何选择存储级别

如果RDD对于默认的存储级别是满足的,就不要选择其他了。这是性能最优的,最高效的(前提内存要足够,这是第一选择)

如果MEMORY_ONLY不一定满足(即:内存不够),可以尝试使用MEMORY_ONLY_SER再加上一个序列化框架(kyro),这样内存的空间更好。序列化就是为了减少空间

不要把数据写到磁盘,成本是非常高的。当数据太大的时候,可以过滤一部分数据再存,这样的话可能会更快

可以使用副本的存储级别能更快的容错,所以的storage level都提供了副本机制,这个机制能让你继续再RDD上运行task,并不需要等待重新计算。(从另外的节点拿)

PS:首选第1种方式,满足不了再使用第2种。后两种不推荐

4.移除缓存数据
Spark会自动地监控每个节点的使用情况,以一种LRU的机制(least-recently-used:最近很少使用)去自动移除。如果想手工代替这种自动去移除,可以使用RDD.unpersist()去处理
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: Spark RDD(弹性分布式数据集)是Spark中最基本的数据结构之一,它是一个不可变的分布式对象集合,可以在集群中进行并行处理。RDD可以从Hadoop文件系统中读取数据,也可以从内存中的数据集创建。RDD支持两种类型的操作:转换操作和行动操作。转换操作是指对RDD进行转换,生成一个新的RDD,而行动操作是指对RDD进行计算并返回结果。RDD具有容错性,因为它们可以在节点之间进行复制,以便在节点故障时恢复数据。 Spark RDD的特点包括: 1. 分布式:RDD可以在集群中进行并行处理,可以在多个节点上进行计算。 2. 不可变性:RDD是不可变的,一旦创建就不能修改,只能通过转换操作生成新的RDD。 3. 容错性:RDD具有容错性,因为它们可以在节点之间进行复制,以便在节点故障时恢复数据。 4. 惰性计算:RDD的计算是惰性的,只有在行动操作时才会进行计算。 5. 缓存RDD可以缓存到内存中,以便在后续操作中快速访问。 Spark RDD的转换操作包括: 1. map:对RDD中的每个元素应用一个函数,生成一个新的RDD。 2. filter:对RDD中的每个元素应用一个函数,返回一个布尔值,将返回值为true的元素生成一个新的RDD。 3. flatMap:对RDD中的每个元素应用一个函数,生成一个新的RDD,该函数返回一个序列,将所有序列中的元素合并成一个新的RDD。 4. groupByKey:将RDD中的元素按照key进行分组,生成一个新的RDD。 5. reduceByKey:将RDD中的元素按照key进行分组,并对每个分组中的元素进行reduce操作,生成一个新的RDDSpark RDD的行动操作包括: 1. count:返回RDD中元素的个数。 2. collect:将RDD中的所有元素收集到一个数组中。 3. reduce:对RDD中的所有元素进行reduce操作,返回一个结果。 4. foreach:对RDD中的每个元素应用一个函数。 5. saveAsTextFile:将RDD中的元素保存到文本文件中。 以上就是Spark RDD的详细介绍。 ### 回答2: Apache Spark是一款基于内存的分布式计算系统,可以处理大规模数据,其中最为重要的就是Spark中的RDD(Resilient Distributed Datasets,弹性分布式数据集),RDDSpark中的基本数据结构,是一种类似于数组的分布式数据集,可以被分割成多个分区,并在集群中的多个节点间进行并行计算。RDDSpark提高执行效率和数据可靠性的重要手段。 在Spark中,RDD具有以下三个特点:弹性、不可变和可分区。弹性指RDD能够自动进行数据分区和容错,即使节点出现故障,也能够自动从故障的节点中复制数据,提高了数据的可靠性和并行计算的效率。不可变指RDD一旦创建就不能够被改变,可以进行转换操作生成新的RDD,也可以被缓存到内存中以供重复使用。可分区则指RDD中可以被分成多个分区,实现并行计算。 SparkRDD的API提供了丰富的操作方法,常见的操作包括:转换操作和动作操作。转换操作指对RDD进行转换操作,返回一个新的RDD对象,例如map()、filter()等;动作操作指对RDD进行计算并返回结果,例如reduce()、collect()等。 值得注意的是,RDD是一种惰性求值的数据结构,即当对RDD进行转换操作时并不会立即进行计算,而是当需要对RDD进行动作操作时才会进行计算,这种惰性求值的机制可以进一步提高Spark的效率。同时,为了提高计算效率,可以使用RDD的持久化(缓存)功能,将RDD持久化到内存中,以便复用。 总之,RDDSpark中的核心数据结构,其弹性、不可变和可分区的特点以及丰富的API操作方法,为Spark实现高效计算和数据处理提供了重要的支持。 ### 回答3: Spark RDDSpark的核心抽象,代表分布式的元素集合,支持多种操作和转换。RDD可以看作是一个不可变的分布式内存数据集合,由一些分布式的partition(分区)组成。 1. RDD的特性: - 分布式的数据集,可以跨越多个节点进行计算 - 可以并行处理,充分利用集群计算资源 - 不可变的数据集,任何对数据集的操作都会生成新的数据集 - 支持多种类型的转换操作,如map、filter、reduce、groupByKey等 2. RDD的创建: - 通过外部数据源创建RDD:从HDFS或其他存储系统中读取数据创建 - 通过程序中的数据结构创建RDD:从内存中的数据结构中创建 - 通过其他RDD转换创建RDD:通过对已有的RDD进行转换操作创建 3. RDD的转换: RDD支持多种类型的操作和转换,如map、filter、reduce、groupByKey等。这些转换操作不会立即执行,而是记录下来,等到需要输出结果时才会真正执行。 4. RDD的行动: 行动操作是指对RDD进行计算并返回结果的操作,如count、collect等。行动操作会立即触发RDD的计算过程。 5. RDD缓存RDD支持缓存操作,将一个RDD的结果缓存在内存中,提高后续对该RDD的计算效率。缓存可以在计算过程中多次使用,通过unpersist清理缓存。 6. RDD的持久化: 当RDD的计算过程非常复杂时,可以将计算过程中得到的RDD进行持久化以便后续使用。持久化可以选择将RDD保存在磁盘中或者内存中,也可以将RDD复制到多个节点上以保障数据的可靠性。 7. RDD的checkpoint: RDD的checkpoint是指将RDD的计算结果保存在HDFS或其他分布式存储系统中,以便后续查询和还原数据集。在计算复杂的RDD时,使用checkpoint可以避免计算过程中数据丢失的问题。 总的来说,Spark RDDSpark分布式计算的核心特性,其提供对大规模数据集的分布式处理能力,以及丰富的操作和转换方式,使得程序员可以轻松地处理海量数据。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值