大数据 - 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()
  }
}
相关推荐
Francek Chen1 小时前
【大数据技术基础 | 实验十二】Hive实验:Hive分区
大数据·数据仓库·hive·hadoop·分布式
Natural_yz4 小时前
大数据学习17之Spark-Core
大数据·学习·spark
莫叫石榴姐5 小时前
数据科学与SQL:组距分组分析 | 区间分布问题
大数据·人工智能·sql·深度学习·算法·机器学习·数据挖掘
刘九灵6 小时前
Redis ⽀持哪⼏种数据类型?适⽤场景,底层结构
redis·缓存
魔珐科技6 小时前
以3D数字人AI产品赋能教育培训人才发展,魔珐科技亮相AI+教育创新与人才发展大会
大数据·人工智能
上优7 小时前
uniapp 选择 省市区 省市 以及 回显
大数据·elasticsearch·uni-app
samLi06208 小时前
【更新】中国省级产业集聚测算数据及协调集聚指数数据(2000-2022年)
大数据
Mephisto.java8 小时前
【大数据学习 | Spark-Core】Spark提交及运行流程
大数据·学习·spark
EasyCVR9 小时前
私有化部署视频平台EasyCVR宇视设备视频平台如何构建视频联网平台及升级视频转码业务?
大数据·网络·音视频·h.265
hummhumm9 小时前
第 22 章 - Go语言 测试与基准测试
java·大数据·开发语言·前端·python·golang·log4j