Spark优化-缓存和checkpoint

目录

缓存使用

checkpoint使用

两者的区别


如下图,如果不适用缓存,rdd3的数据需要经过两次计算,而每次计算也是在内存中计算,很消耗内存,而使用了缓存,可以直接从缓存中直接获取数据,不需要每次对rdd2进行计算

缓存和checkpoint也叫作rdd的持久化,将rdd的数据存储在指定位置

作用:

1-计算容错

2**-提升计算速度**

缓存使用

缓存是将数据存储在内存或者磁盘上,缓存的特点时,计算结束,缓存自动清空.默认是缓存到内存上.

python 复制代码
StorageLevel.DISK_ONLY # 将数据缓存到磁盘上
StorageLevel.DISK_ONLY_2 # 将数据缓存到磁盘上 保存两份
StorageLevel.DISK_ONLY_3 # 将数据缓存到磁盘上 保存三份
StorageLevel.MEMORY_ONLY # 将数据缓存到内存  默认
StorageLevel.MEMORY_ONLY_2 # 将数据缓存到内存 保存两份
StorageLevel.MEMORY_AND_DISK # 将数据缓存到内存和磁盘  优先将数据缓存到内存上,内存不足可以缓存到磁盘
StorageLevel.MEMORY_AND_DISK_2 = # 将数据缓存到内存和磁盘
StorageLevel.OFF_HEAP # 不使用  缓存在系统管理的内存上   heap jvm的java虚拟机中的heap
StorageLevel.MEMORY_AND_DISK_ESER # 将数据缓存到内存和磁盘  序列化操作,按照二进制存储,节省空间
  • persist 使用该方法

  • cache 内部调用persist

  • 手动释放 unpersist

storageLevel 修改缓存级别

rdd_groupby.persist(storageLevel=StorageLevel.MEMORY_AND_DISK)

对列表单词进行统计

python 复制代码
from pyspark import SparkContext
from pyspark.storagelevel import StorageLevel
sc = SparkContext()


rdd = sc.parallelize(['a','b','c','a','a','b'])

# rdd数据转换
rdd_kv = rdd.map(lambda x : (x,1))

# 进行缓存
rdd_kv.persist(storageLevel=StorageLevel.MEMORY_AND_DISK)

# 触发缓存
rdd_kv.collect()

# 分组处理
rdd_group = rdd_kv.groupByKey()

# 聚合处理
rdd_reduce = rdd_kv.reduceByKey(lambda x,y: x+y)

# 查看结果
res = rdd_group.collect()
print(res)

res1 = rdd_reduce.collect()
print(res1)

checkpoint使用

也是将中间rdd数据存储起来,但是存储的位置实时分布式存储系统,可以进行永久保存,程序结束不会释放

如果需要删除就在hdfs上删除对应的目录文件

  • 使用sc对象指定checkpoint存储位置

  • sc.setCheckpointDir('hdfs://node1:8020/data/checkpoint')
  • 进行checkpoint

  • rdd_kv.checkpoint()

对列表单词进行统计,并存储到hdfs上

python 复制代码
from pyspark import SparkContext
from pyspark.storagelevel import StorageLevel
sc = SparkContext()

# 使用sc对象指定checkpoint存储位置
sc.setCheckpointDir('hdfs://node1:8020/data/checkpoint')

rdd = sc.parallelize(['a','b','c','a','a','b'])

# rdd数据转换
rdd_kv = rdd.map(lambda x : (x,1))

# 进行checkpoint
rdd_kv.checkpoint()

# 需要使用action触发缓存checkpoint
print(rdd_kv.glom().collect())

# 分组处理
rdd_group = rdd_kv.groupByKey()

# 聚合处理
rdd_reduce = rdd_kv.reduceByKey(lambda x,y: x+y)

# 查看结果
res = rdd_group.collect()
print(res)

res1 = rdd_reduce.collect()
print(res1)

两者的区别

  • 生命周期
    • 缓存数据, 程序计算结束后自动删除
    • checkpoint 程序结束,数据依然保留在hdfs
  • 存储位置
    • 缓存 优先存储在内存上,也可以选在存储在本地磁盘,是在计算任务所在的内存和磁盘上
    • checkpoint 存储在hdfs上
  • 依赖关系
    • 缓存数据后,会保留rdd之间依赖关系 缓存时临时存储,数据可能会丢失,需要保留依赖,当缓存丢失后可以按照依赖重新计算
    • checkpoint,数据存储后会断开依赖, 数据保存在hdfs,hdfs三副本可以保证数据不丢失,所以没有比较保留依赖关系
相关推荐
hey you~14 分钟前
2026年北上广深呼叫中心系统现状:AI Agent落地一年后,技术栈被重构了吗?
大数据·人工智能·ai agent·高并发架构·呼叫中心系统·asr优化·北上广深
一次旅行21 分钟前
【AI技术_工具】用 MCP 把本地工具接入 Claude_Cursor,让 AI 真正摸到你的数据
大数据·人工智能·python
ws20190725 分钟前
从零件到核心:AUTO TECH China 2026广州汽车零部件展的产业新叙事
大数据·人工智能·科技·汽车
数智化管理手记28 分钟前
智能财务能替代人工核算吗?智能财务核心功能包含哪些?
大数据·网络·数据库·数据挖掘·精益工程
zandy101130 分钟前
地址解析厂商推荐:分行业地址服务能力选型与技术分析
大数据·运维·人工智能
金智维科技官方40 分钟前
DeepSeek接入企业系统:流程自动化新玩法
大数据·数据库·人工智能
无忧智库1 小时前
数据安全与数据合规体系建设规划:从“合规应付”到“数据可控、可用、可审计”的落地指南(PPT)
大数据·人工智能·安全
玩美数据2 小时前
2026全球出海市场研究TOP5:深度行业洞察与高效供应商网络塑造市场竞争力
大数据·人工智能
qq_543447822 小时前
等保合规服务商哪家好?
大数据
2501_948106912 小时前
计算机毕业设计之jsp物业管理系统
java·大数据·开发语言·汽车·课程设计