Spark缓存

Spark 缓存(Caching)是一种重要的性能优化技术,它允许将频繁使用的数据集持久化到内存或磁盘中,避免重复计算。

缓存的基本概念

为什么要使用缓存?

1.避免重复计算:对于需要多次使用的 RDD/DataFrame/Dataset,缓存后只需计算一次

2.加速迭代算法:机器学习等迭代算法中,重复使用同一数据集时可显著提升性能

3.优化执行计划:减少从数据源重复读取数据的开销

缓存方法

主要缓存API

Scala 复制代码
val rdd = sc.parallelize(1 to 100)

// 缓存方法
rdd.cache()  // 等同于 persist(MEMORY_ONLY)
rdd.persist()  // 使用默认存储级别
rdd.persist(StorageLevel.MEMORY_AND_DISK)  // 指定存储级别

// 取消缓存
rdd.unpersist()

存储级别(StorageLevel)

|-------------------------|------------------------|
| 存储级别 | 描述 |
| `MEMORY_ONLY` | 只存储在内存中(默认) |
| `MEMORY_AND_DISK` | 内存存不下时溢出到磁盘 |
| `MEMORY_ONLY_SER` | 序列化后存储内存(节省空间但增加CPU开销) |
| `MEMORY_AND_DISK_SER` | 序列化存储,内存不足时存磁盘 |
| `DISK_ONLY` | 只存储在磁盘 |
| `OFF_HEAP` | 使用堆外内存 |

缓存的最佳实践

  1. 选择性缓存:

只缓存会被多次使用的数据集

避免缓存一次性使用的数据

  1. 合理选择存储级别:

内存充足时使用 `MEMORY_ONLY`

大数据集且内存有限时使用 `MEMORY_AND_DISK`

对象较大时考虑序列化存储(`_SER`)

  1. 及时释放:

使用 `unpersist()` 释放不再需要的缓存

避免不必要的内存占用

  1. 监控缓存使用:

通过 Spark UI 查看缓存大小和命中率

调整缓存策略基于实际使用情况

缓存示例

Scala 复制代码
// 读取大数据集
val logs = spark.read.csv("huge-log-file.csv")

// 过滤并缓存常用数据
val errorLogs = logs.filter($"level" === "ERROR").cache()

// 多次使用缓存数据
val errorCount = errorLogs.count()
val recentErrors = errorLogs.filter($"date" > "2023-01-01")

// 使用完成后释放
errorLogs.unpersist()

注意事项

  1. 缓存不保证数据一定在内存中(可能因内存压力被LRU淘汰)

  2. 缓存是惰性的,第一次action操作时才会真正缓存

  3. 序列化缓存可节省空间但增加CPU开销

  4. 在Spark UI的Storage标签页可以查看缓存状态

合理使用缓存可以显著提高Spark应用性能,但需要根据数据大小、访问模式和集群资源进行适当配置。

相关推荐
字节跳动数据平台29 分钟前
代码量减少 70%、GPU 利用率达 95%:火山引擎多模态数据湖如何释放模思智能的算法生产力
大数据
得物技术2 小时前
深入剖析Spark UI界面:参数与界面详解|得物技术
大数据·后端·spark
武子康3 小时前
大数据-238 离线数仓 - 广告业务 Hive分析实战:ADS 点击率、购买率与 Top100 排名避坑
大数据·后端·apache hive
武子康1 天前
大数据-237 离线数仓 - Hive 广告业务实战:ODS→DWD 事件解析、广告明细与转化分析落地
大数据·后端·apache hive
大大大大晴天1 天前
Flink生产问题排障-Kryo serializer scala extensions are not available
大数据·flink
武子康3 天前
大数据-236 离线数仓 - 会员指标验证、DataX 导出与广告业务 ODS/DWD/ADS 全流程
大数据·后端·apache hive
肌肉娃子4 天前
20260227.spark.Spark 性能刺客:千万别在 for 循环里写 withColumn
spark
武子康4 天前
大数据-235 离线数仓 - 实战:Flume+HDFS+Hive 搭建 ODS/DWD/DWS/ADS 会员分析链路
大数据·后端·apache hive
DianSan_ERP5 天前
电商API接口全链路监控:构建坚不可摧的线上运维防线
大数据·运维·网络·人工智能·git·servlet
够快云库5 天前
能源行业非结构化数据治理实战:从数据沼泽到智能资产
大数据·人工智能·机器学习·企业文件安全