Spark调优的关键—RDD Cache缓存使用详解
2023-03-09 21:58:46 时间
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
3.如何选择存储级别
如果RDD对于默认的存储级别是满足的,就不要选择其他了。这是性能最优的,最高效的(前提内存要足够,这是第一选择)
如果MEMORY_ONLY不一定满足(即:内存不够),可以尝试使用MEMORY_ONLY_SER再加上一个序列化框架(kyro),这样内存的空间更好。序列化就是为了减少空间
不要把数据写到磁盘,成本是非常高的。当数据太大的时候,可以过滤一部分数据再存,这样的话可能会更快
可以使用副本的存储级别能更快的容错,所以的storage level都提供了副本机制,这个机制能让你继续再RDD上运行task,并不需要等待重新计算。(从另外的节点拿)
************************首选第1种方式,满足不了再使用第2种。后两种不推荐
4.移除缓存数据
Spark会自动地监控每个节点的使用情况,以一种LRU的机制(least-recently-used:最近很少使用)去自动移除。如果想手工代替这种自动去移除,可以使用RDD.unpersist()去处理
相关文章
- 在 Go 里用 CGO?这 7 个问题你要关注!
- 9款优秀的去中心化通讯软件 Matrix 的客户端
- 求职数据分析,项目经验该怎么写
- 在OKR中,我看到了数据驱动业务的未来
- 火山引擎云原生大数据在金融行业的实践
- OpenHarmony富设备移植指南(二)—从postmarketOS获取移植资源
- 《数据成熟度指数》报告:64%的企业领袖认为大多数员工“不懂数据”
- OpenHarmony 小型系统兼容性测试指南
- 肯睿中国(Cloudera):2023年企业数字战略三大趋势预测
- 适用于 Linux 的十大命令行游戏
- GNOME 截图工具的新旧截图方式
- System76 即将推出的 COSMIC 桌面正在酝酿大变化
- 2GB 内存 8GB 存储即可流畅运行,Windows 11 极致精简版系统 Tiny11 发布
- 迎接 ecode:一个即将推出的具有全新图形用户界面框架的现代、轻量级代码编辑器
- loongarch架构介绍(三)—地址翻译
- Go 语言怎么解决编译器错误“err is shadowed during return”?
- 敏捷:可能被开发人员遗忘的部分
- Denodo预测2023年数据管理和分析的未来
- 利用数据推动可持续发展
- 在 Vue3 中实现 React 原生 Hooks(useState、useEffect),深入理解 React Hooks 的