Spark调优的关键—RDD Cache缓存使用详解

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

1.概述

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

cache()方法表示:使用非序列化的方式将RDD的数据全部尝试持久化到内存中,cache()只是一个transformtion,是lazy的,必须通过一个action触发,才能真正的将该RDD cache到内存中。

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

[[230661]]

3.如何选择存储级别

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

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

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

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

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

4.移除缓存数据

Spark会自动地监控每个节点的使用情况,以一种LRU的机制(least-recently-used:最近很少使用)去自动移除。如果想手工代替这种自动去移除,可以使用RDD.unpersist()去处理

责任编辑:武晓燕 来源: 若泽大数据
相关推荐

2021-03-04 08:39:21

SparkRDD调优

2023-11-10 09:29:30

MySQLExplain

2019-11-01 08:49:07

JVM监控性能

2019-07-17 15:45:24

Spark内存Java

2018-07-18 12:12:20

Spark大数据代码

2017-07-07 11:01:04

Spark性能调优

2017-10-20 13:41:11

Spark集群代码

2016-10-24 09:52:45

SparkRDD容错

2016-10-24 23:04:56

SparkRDD数据

2011-03-10 14:40:54

LAMPMysql

2021-12-26 00:03:25

Spark性能调优

2012-01-10 14:35:08

JavaJVM

2023-05-05 18:38:33

多级缓存Caffeine开发

2023-10-13 12:28:38

2009-04-01 11:17:52

内存分配调优Oracle

2009-09-22 10:50:04

Hibernate c

2017-07-21 08:55:13

TomcatJVM容器

2016-11-11 20:16:23

数据倾斜spark

2022-03-31 09:13:49

Cache缓存高并发

2011-03-14 09:35:26

LAMP调优方法
点赞
收藏

51CTO技术栈公众号