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

spark组件-spark core(批处理)-rdd持久化机制

Spark持久化机制是Spark框架中用于提升计算性能的核心特性,主要通过将RDD(弹性分布式数据集)的计算结果保存起来,避免重复计算的开销。

持久化原理与触发时机

RDD采用惰性求值方式,每次调用行动算子(Action)都会从头开始计算。持久化机制通过在节点内存或磁盘中缓存RDD的partition数据,使得后续对该RDD的反复操作可以直接使用缓存数据,而无需重新计算。需要注意的是,调用cache()persist()方法时并不会立即缓存数据,而是等到后续第一个行动算子触发计算后,该RDD才会被持久化。此机制对于需要多次重复使用同一数据集的迭代计算和交互式查询场景尤为重要。

持久化操作方法

Spark提供了cache()persist()两种方法来实现RDD持久化:

  • cache()方法是persist()的一种简化形式,其底层调用的是persist(MEMORY_ONLY),即将数据以未序列化的Java对象形式持久化到内存中。
  • persist()方法允许手动选择不同的存储级别,通过传入StorageLevel对象来指定。
    如果需要清除缓存,可以调用unpersist()方法。

存储级别

通过persist()方法可以指定多种存储级别,以适应不同的需求,主要包括:

  • MEMORY_ONLY:将RDD以未序列化的Java对象形式存储于内存。这是cache()的默认级别,内存不足时部分分区数据将不被缓存。
  • MEMORY_AND_DISK:内存不足时,将部分分区数据写入磁盘。
  • MEMORY_ONLY_SERMEMORY_AND_DISK_SER:将RDD以序列化的字节数组形式存储,节省内存空间但增加CPU开销。
  • DISK_ONLY:仅将数据保存到磁盘。
    带有“_2”后缀的级别(如MEMORY_ONLY_2)会在两个不同节点上保存副本,提高容错性。

容错机制

RDD的缓存存在丢失风险,但其容错机制保证了计算的正确性。该机制基于RDD的血统(Lineage)信息,当缓存数据丢失时,Spark只需要通过依赖关系重新计算丢失的分区数据即可,无需重算整个RDD。

Checkpoint机制

除了cachepersist,Spark还提供了Checkpoint机制。它与持久化的主要区别在于:

  • 数据管理:Checkpoint将数据永久写入HDFS等可靠文件系统,需用户管理;而cachepersist的数据由Spark自动管理(包括创建和回收)。
  • 血统影响:Checkpoint会切断RDD的血统关系,避免依赖链过长;而cachepersist会保留血统。
  • 计算次数:由于Checkpoint通常在Job完成后由另一个专门Job执行,可能导致RDD被计算两次。因此建议在使用Checkpoint前先对RDD进行缓存,以避免重复计算。Checkpoint适用于Lineage过长或包含宽依赖的场景,提供更强的容错保障

例子:
1.cache()

public class Test01_Cache {public static void main(String[] args) {// 1. 创建配置对象SparkConf conf = new SparkConf().setMaster("local[*]").setAppName("WordCount");// 2. 创建contextJavaSparkContext sc = new JavaSparkContext(conf);// 3. 业务代码JavaRDD<Tuple2<String, Integer>> javaRDD = sc.parallelize(Arrays.asList(new Tuple2<>("a", 1),new Tuple2<>("a", 2),new Tuple2<>("a", 3),new Tuple2<>("b", 1),new Tuple2<>("b", 2)),2);JavaPairRDD<String, Integer> javaPairRDD = javaRDD.mapToPair(new PairFunction<Tuple2<String, Integer>, String, Integer>() {@Overridepublic Tuple2<String, Integer> call(Tuple2<String, Integer> stringIntegerTuple2) throws Exception {System.out.println("---------------------------");return new Tuple2<>(stringIntegerTuple2._1, stringIntegerTuple2._2
http://www.dtcms.com/a/511499.html

相关文章:

  • 安全驾驶 智在掌控|腾视科技ES06终端,为车辆运营赋能
  • el-table 表格嵌套表格
  • 云南网站建设首选才力东营注册公司
  • 非对称密码算法分析技术深度剖析及未来展望
  • Arduino IDE下载安装汉化教程(附安装包,图文并茂)
  • 本地转移新分支到新仓库
  • GaussDB慢sql信息收集和执行计划查看
  • AWS IoT Core 监控与告警优化实战报告
  • 我的第一个开源项目【IOT-Tree Server】
  • 如何选择合适的倾角传感器厂家的产品以满足物联网监测需求?
  • 基于物联网与云计算的园区能耗管理平台构建与实践
  • Markdown 用法要点
  • 网站搭建功能需求wordpress安装怎么填
  • 网络原理:TCP协议
  • timm教程翻译:(六)Data
  • VSCode + AI Agent实现直接编译调试:告别Visual Studio的原理与实践
  • 【设计模式】建造者模式(Builder)
  • DeepSeek-OCR:把长文本“挤进图片”的新思路
  • 计算机做网站开题报告网页的六个基本元素
  • AI服务器工作之整机部件(CPU+内存)
  • 【EE初阶 - 网络原理】网络层 + 数据链路层 + DNS
  • 关于二级网站建设西安网站制作一般多少钱
  • 【机器学习06】神经网络的实现、训练与向量化
  • [人工智能-大模型-25]:大模型应用层技术栈 - 大模型应用层的四大开发模式(如何利用大语言模型?)
  • YOLO目标检测:一种用于无人机的新型轻量级目标检测网络
  • 第六部分:VTK进阶(第166章 标量-向量-张量场管理)
  • A Survey of Camouflaged Object Detection and Beyond论文阅读笔记
  • 基于 hexo + github 的个人博客系统搭建
  • 成都私人做网站建设自由做图网站
  • 哈尔滨做网站找哪家好网站的在线支付怎么做