大数据 - Spark系列《十》- rdd缓存详解

Spark系列文章:

大数据 - Spark系列《一》- 从Hadoop到Spark:大数据计算引擎的演进-CSDN博客

大数据 - Spark系列《二》- 关于Spark在Idea中的一些常用配置-CSDN博客

大数据 - Spark系列《三》- 加载各种数据源创建RDD-CSDN博客

大数据 - Spark系列《四》- Spark分布式运行原理-CSDN博客

大数据 - Spark系列《五》- Spark常用算子-CSDN博客

大数据 - Spark系列《六》- RDD详解-CSDN博客

大数据 - Spark系列《七》- 分区器详解-CSDN博客

大数据 - Spark系列《八》- 闭包引用-CSDN博客

大数据 - Spark系列《九》- 广播变量-CSDN博客

10.1 RDD缓存的概念理解

如果一个RDD是由多个RDD计算来的 ,且后续的使用多次

rdd1->rdd2->rdd3->rdd4 -->rdd4结果缓存 重复使用

          • -> rdd4.map
          • -> rdd4.flatmap
          • -> rdd4.groupBy

缓存不会破坏rdd之间的依赖关系,所以缓存的数据丢失后不会影响计算结果,通过血源关系重新追溯计算

10.2 RDD缓存API

1. persist
​rdd2.persist(StorageLevel.MEMORY_AND_DISK)  // 可以自己控制存储级别
​
// NONE  相当于没有存储
// DISK_ONLY  缓存到磁盘
// DISK_ONLY_2  缓存到磁盘,2个副本
// MEMORY_ONLY    缓存到内存
// MEMORY_ONLY_2    缓存到内存,2个副本
// MEMORY_ONLY_SER    缓存到内存,以序列化格式
// MEMORY_ONLY_SER_2    缓存到内存,以序列化格式,2个副本
// MEMORY_AND_DISK    缓存到内存和磁盘
// MEMORY_AND_DISK_2    缓存到内存和磁盘,2个副本
// MEMORY_AND_DISK_SER    缓存到内存和磁盘,以序列化格式
// MEMORY_AND_DISK_SER_2    缓存到内存和磁盘,以序列化格式,2个副本
// OFF_HEAP    缓存到堆外内存

🍠堆内存和堆外存

  1. 堆内存

    1. 概念:堆内存是指在计算机内存中由操作系统动态分配给程序的一块内存区域,用于存储程序运行时创建的对象和数据结构。

    2. 特点:堆内存是动态分配的,大小不固定,可根据程序需要动态扩展和收缩。在堆内存中分配的内存空间由垃圾回收器负责管理,当对象不再被程序引用时,垃圾回收器会自动回收这些对象所占用的内存空间,以便其他对象使用。

    3. 使用场景:堆内存通常用于存储程序运行时动态创建的对象和数据结构,如Java中的对象实例等。

  2. 堆外存:

    1. 概念:堆外存是指数据存储在计算机内存之外的存储介质上,如硬盘、SSD等,也称为外部存储。

    2. 特点:堆外存的存储空间通常比堆内存大得多,但访问速度相对较慢。堆外存的数据持久性较高,即使程序结束或计算机断电,数据仍然能够被保留。在大数据处理中,通常会将数据存储在堆外存储介质上,以应对数据量大、持久性要求高的情况。

    3. 使用场景:堆外存通常用于存储大规模数据集,如文件、数据库等,以及需要长期保存和持久化的数据。

2. unpersist

如果需要清除已经缓存的RDD数据,可以调用 rdd.unpersist() 方法;

3. 🥙 cache

cache( )就是调用的 persist(StorageLevel.MEMORY_ONLY)

//数据:logs.txt
ERROR: Unable to connect to database
ERROR: File not found
WARNING: Disk space is running low
INFO: Server started successfully
INFO: User login successful
ERROR: Connection timeout
WARNING: Network connection unstable
INFO: Data processing completed
INFO: Task execution started
INFO: Application terminated
WARNING: System temperature is high
ERROR: Out of memory error
INFO: File uploaded successfully
INFO: Database backup completed
ERROR: Server crashed unexpectedly

package com.doit.day0219
import org.apache.spark.rdd.RDD
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.storage.StorageLevel
import org.apache.log4j.{Level, Logger}
/**
 * @日期: 2024/2/19
 * @Author: Wang NaPao
 * @Blog: https://blog.csdn.net/weixin_40968325?spm=1018.2226.3001.5343
 * @Tips: 和我一起学习吧
 * @Description:
 */


object Test01 {
  def main(args: Array[String]): Unit = {
    // 创建SparkConf对象,并设置应用程序名称和运行模式
    val conf = new SparkConf()
      .setAppName("LogAnalysis") // 设置应用程序名称
      .setMaster("local[*]") // 设置运行模式为本地模式
    Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    // 创建SparkContext对象,并传入SparkConf对象
    val sc = new SparkContext(conf)

    val rdd1 = sc.textFile("data/logs.txt")
    val rdd2 = rdd1.map(line => {
      val arr: Array[String] = line.split(": ")
      (arr(0), 1)
    })

    val rdd3 = rdd2.groupByKey()
    val rdd4 = rdd3.map(e => {
      println("rdd4的逻辑执行"+e._1)
      (e._1, e._2.size)
    })

    // rdd4.cache() // 将rdd4的结果缓存起来 内存中
    //cache( )就是调用的 persist(StorageLevel.MEMORY_ONLY)
    rdd4.persist(StorageLevel.MEMORY_ONLY)
    /*
        rdd4.persist()  // 内存中
        rdd4.persist(StorageLevel.DISK_ONLY)
        rdd4.persist(StorageLevel.MEMORY_ONLY)  // 堆内内存  数据对象的方式管理
        rdd4.persist(StorageLevel.DISK_ONLY_3)  // 副本
        rdd4.persist(StorageLevel.MEMORY_ONLY_2)  // 副本
        rdd4.persist(StorageLevel.MEMORY_AND_DISK)  // 副本
        // 开启堆外内存 缓存数据
        rdd4.persist(StorageLevel.OFF_HEAP)  // 堆外
    */

    // 保留rdd之间的依赖   , 所以缓存的数据丢失不会影响最后的计算结果
    // 通过rdd的依赖关系恢复
    println("--------------------------------")
    rdd4.filter(_._1=="ERROR").foreach(e=>{println("ERROR 数量为"+e._2)})
    rdd4.filter(_._1=="WARNING").foreach(e=>{println("WARNING 数量为"+e._2)})
    rdd4.filter(_._1=="INFO").foreach(e=>{println("INFO 数量为"+e._2)})
    sc.stop()
  }
}
相关推荐
lzhlizihang27 分钟前
【Hive sql 面试题】求出各类型专利top 10申请人,以及对应的专利申请数(难)
大数据·hive·sql·面试题
Tianyanxiao30 分钟前
如何利用探商宝精准营销,抓住行业机遇——以AI技术与大数据推动企业信息精准筛选
大数据·人工智能·科技·数据分析·深度优先·零售
大数据编程之光32 分钟前
Hive 查询各类型专利 top10 申请人及专利申请数
大数据·数据仓库·hive·hadoop
GDDGHS_1 小时前
大数据工具 flume 的安装配置与使用 (详细版)
大数据·flume
Acrelhuang2 小时前
安科瑞5G基站直流叠光监控系统-安科瑞黄安南
大数据·数据库·数据仓库·物联网
皓7412 小时前
服饰电商行业知识管理的创新实践与知识中台的重要性
大数据·人工智能·科技·数据分析·零售
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka的kraft集群
大数据·sql·oracle·kafka·json·hbase
Mephisto.java2 小时前
【大数据学习 | kafka高级部分】kafka的文件存储原理
大数据·sql·oracle·kafka·json
W Y3 小时前
【架构-37】Spark和Flink
架构·flink·spark
ycsdn103 小时前
Caused by: org.apache.flink.api.common.io.ParseException: Row too short:
大数据·flink