RDD持久化、存储级别与缓存

一、RDD持久化

2、不采用持久化操作

查看要操作的文件

启动Spark Shell

按照图示进行操作,得RDD4和RDD5

计算RDD4,会RDD1到RDD2到RDD3到RDD4跑一趟,查看结果

计算RDD5,也会RDD1到RDD2到RDD3到RDD4跑一趟,查看结果

 3、采用持久化操作

 计算RDD4,就是基于RDD3缓存的数据开始计算,不用从头到尾跑一趟

 计算RDD5,就是基于RDD3缓存的数据开始计算,不用从头到尾跑一趟

 二、案例演示设置存储级别

net.huawei.rdd包里创建TestPersist对象

package net.huawei.rdd

import org.apache.log4j.{Level, Logger}
import org.apache.spark.{SparkConf, SparkContext}
import org.apache.spark.rdd.RDD

/**
  * 功能:演示持久化操作
  * 作者:华卫
  * 日期:2022年04月11日
  */
object TestPersist {
  def main(args: Array[String]): Unit = {
    // 创建Spark配置对象
    val conf = new SparkConf()
    conf.setAppName("TestPersist")
      .setMaster("local")
      .set("spark.testing.memory", "2147480000")
    // 基于配置创建Spark上下文
    val sc = new SparkContext(conf)

    // 去除Spark运行信息
    Logger.getLogger("org").setLevel(Level.OFF)
    Logger.getLogger("com").setLevel(Level.OFF)
    System.setProperty("spark.ui.showConsoleProgress", "false")
    Logger.getRootLogger().setLevel(Level.OFF)

    //创建RDD
    val rdd: RDD[Int] = sc.parallelize(List(100, 200, 300, 400, 500))

    //将RDD标记为持久化,默认存储级别为StorageLevel.MEMORY_ONLY
    rdd.persist()
    // rdd.persist(StorageLevel.DISK_ONLY)  //持久化到磁盘
    // rdd.persist(StorageLevel.MEMORY_AND_DISK)//持久化到内存,将溢出的数据持久化到磁盘

    // 第一次行动算子计算时,将对标记为持久化的RDD进行持久化操作
    val result: String = rdd.collect().mkString(", ")
    println(result)

    // 第二次行动算子计算时,将直接从持久化的目的地读取数据进行操作,而不需要从头计算数据
    rdd.collect().foreach(println)
  }
}

 

 

三、利用Spark WebUI查看缓存

(一)创建RDD并标记为持久化

 

(二)Spark WebUI查看RDD存储信息

  • 浏览器中访问Spark Shell的WebUI http://master:4040/storage/查看RDD存储信息,可以看到存储信息为空

执行命令:rdd.collect(),收集RDD数据

 

 刷新WebUI,发现出现了一个ParallelCollectionRDD的存储信息,该RDD的存储级别为MEMORY,持久化的分区为8,完全存储于内存中。

单击ParallelCollectionRDD超链接,可以查看该RDD的详细存储信息

 执行以下命令,创建rdd2,并将rdd2持久化到磁盘

 

刷新上述WebUI,发现多了一个MapPartitionsRDD的存储信息,该RDD的存储级别为DISK,持久化的分区为8,完全存储于磁盘中。 

 

(三)将RDD从缓存中删除

  • 执行以下命令,将rdd(ParallelCollectionRDD)从缓存中删除

 刷新上述WebUI,发现只剩下了MapPartitionsRDDParallelCollectionRDD已被移除。

 

  • Spark会自动监视每个节点上的缓存使用情况,并以最近最少使用的方式从缓存中删除旧的分区数据。如果希望手动删除RDD,而不是等待该RDD被Spark自动从缓存中删除,那么可以使用RDD的unpersist()方法。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值