当前位置: 首页 > ops >正文

Spark 缓存(Caching)

Spark 缓存机制详解

1. 缓存的核心作用
  • 加速计算:通过将重复使用的数据集存储在内存或磁盘,避免重复计算
  • 优化迭代算法:适用于机器学习训练、图计算等需要多次访问同一数据集的场景
  • 减少I/O开销:对于频繁访问的外部数据源,缓存后可降低读取成本
2. 持久化级别对比
级别存储方式序列化适用场景
MEMORY_ONLY仅内存内存充足的小数据集
MEMORY_AND_DISK内存+磁盘溢出内存受限的较大数据集
MEMORY_ONLY_SER内存(序列化存储)内存优化场景
DISK_ONLY仅磁盘超大数据集
3. 代码实现示例
from pyspark import StorageLevel# 创建DataFrame
df = spark.read.parquet("hdfs://data/large_dataset")# 缓存方式一(默认MEMORY_AND_DISK)
df.cache().count()  # 立即触发缓存# 缓存方式二(指定存储级别)
df.persist(StorageLevel.MEMORY_ONLY_SER)# 释放缓存
df.unpersist()

4. 使用场景判断

✅ 推荐缓存:

  • 循环使用的中间结果(迭代算法)
  • 被多次访问的广播连接表
  • 需要快速访问的预处理数据

❌ 避免缓存:

  • 仅单次使用的数据集
  • 大于集群可用内存50%的数据量
  • 频繁更新的动态数据
5. 性能优化技巧
  • 缓存前使用.filter().select()精简数据
  • 对宽表优先使用序列化存储(节省30%-50%内存)
  • 监控存储管理器:
    print(spark.sparkContext.uiWebUrl)  # 查看Storage选项卡
    

  • 配合checkpoint使用:切断RDD血缘关系,避免堆栈溢出
6. 缓存失效场景
  • JVM内存不足时自动逐出
  • 节点故障导致分区丢失
  • 调用unpersist()主动释放
  • 应用结束时自动清除
7. 高级配置参数
spark.storage.memoryFraction=0.6  # 内存分配比例
spark.serializer=org.apache.spark.serializer.KryoSerializer
spark.memory.offHeap.enabled=true  # 启用堆外内存
spark.memory.offHeap.size=2g

通过合理使用缓存,典型场景可提升作业性能3-10倍。建议结合Spark UI监控缓存命中率和内存使用情况,动态调整存储策略。

http://www.xdnf.cn/news/5771.html

相关文章:

  • 2025年PMP 学习十一 第8章 项目质量管理(8.3)
  • 运行Spark程序-在Idea中
  • 基于智能家居项目 实现DHT11驱动源代码
  • Linux目录和文件
  • idea Maven 打包SpringBoot可执行的jar包
  • C语言 ——— 函数栈帧的创建和销毁
  • Qt6.5.3 windows下安装教程
  • c++STL-list的使用和迭代器
  • 【AIGC 温柔档案】:镂空蕾丝与柔和线条的唯美算法融合
  • PostgreSQL 配置设置函数
  • MySQL 8.0 OCP 英文题库解析(四)
  • STM32 修炼手册
  • PostgreSQL 服务器信号函数
  • 设计模式深度解析:AI大模型下的策略模式与模板方法模式对比解析
  • 力扣HOT100之二叉树:543. 二叉树的直径
  • web 自动化之 KDT 关键字驱动详解
  • 什么是Git?
  • 性能优化--无分支编程的实际应用场景
  • 基于动态规划的强化学习方法
  • 佰力博科技与您探讨表面电阻的测试方法及应用领域
  • 小刚说C语言刷题—1080质因子
  • Kafka 4.0版本的推出:数据处理新纪元的破晓之光
  • aardio - 虚表 —— vlistEx.listbar2 多层菜单演示
  • CSV注入攻击技术解析
  • vscode不能跳转到同一个工作区的其他文件夹
  • 为什么要在 input() 后加 .strip()?
  • 基于SSM实现的健身房系统功能实现十六
  • springboot配置tomcat端口
  • 掌控随心 - 服务网格的流量管理艺术 (Istio 实例)
  • 一个完整的项目示例:taro开发微信小程序