大数据 - 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()
  }
}
相关推荐
Rverdoser1 分钟前
redis延迟队列
数据库·redis·缓存
郭源潮34524 分钟前
Hadoop
大数据·hadoop·分布式
weisian15128 分钟前
Redis篇--常见问题篇6--缓存一致性1(Mysql和Redis缓存一致,更新数据库删除缓存策略)
数据库·redis·缓存
中科岩创32 分钟前
中科岩创桥梁自动化监测解决方案
大数据·网络·物联网
百家方案1 小时前
「下载」智慧产业园区-数字孪生建设解决方案:重构产业全景图,打造虚实结合的园区数字化底座
大数据·人工智能·智慧园区·数智化园区
forestsea1 小时前
【Elasticsearch】分片与副本机制:优化数据存储与查询性能
大数据·elasticsearch·搜索引擎
开着拖拉机回家1 小时前
【Ambari】使用 Knox 进行 LDAP 身份认证
大数据·hadoop·gateway·ambari·ldap·knox
记得开心一点嘛1 小时前
高并发处理 --- Caffeine内存缓存库
缓存·caffeine
地球资源数据云1 小时前
全国30米分辨率逐年植被覆盖度(FVC)数据集
大数据·运维·服务器·数据库·均值算法
INFINI Labs2 小时前
Elasticsearch filter context 的使用原理
大数据·elasticsearch·jenkins·filter·querycache