一文看懂Spark中Cache和CheckPoint的区别

这篇具有很好参考价值的文章主要介绍了一文看懂Spark中Cache和CheckPoint的区别。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

循循渐进理解

wc.txt数据

hello java
spark hadoop flume kafka
hbase kafka flume hadoop

看下面代码会打印多少条-------------------------(RDD2)

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

object Cache {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setMaster("local[4]").setAppName("test"))
    val rdd1: RDD[String] = sc.textFile("src/main/resources/wc.txt")

    val rdd2: RDD[String] = rdd1.flatMap(x => {
      println("-------------------------")
      x.split(" ")
    })

    val rdd3: RDD[(String, Int)] = rdd2.map(x => (x, 1))

    val rdd4: RDD[Int] = rdd2.map(x => x.size)

    rdd3.collect()
    rdd4.collect()
    
    Thread.sleep(10000000)
  }


}

正确答案是6条(解释一下wc.txt里面有三行数据,所以flatmap执行一次,会打印三条),因为执行了两个collect()行动算子(action)
大致流程就是这样,因为rdd2没有缓存,所以要执行两次
一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式
一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式

上述的问题
1.一个RDD在多个job中重复使用

  • 问题:每个job执行的时候,该RDD之前处理布置也会宠物中
  • 使用持久化的好处:可以将该RDD数据持久化后,后续job在执行在执行的时候可以直接获取数据计算,不用重读RDD之前数据处理

2.如果一个job依赖链条长

  • 问题:依赖链条太长的时候,如果数据丢失需要重新计算浪费大量的空间
  • 使用持久化的好处:可以直接持久化数据拿来计算,不用重头计算,节省时间

使用Cache或者Persist

看下面代码会打印多少条-------------------------(RDD2) 使用了Cache

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

object Cache {
  def main(args: Array[String]): Unit = {
    val sc = new SparkContext(new SparkConf().setMaster("local[4]").setAppName("test"))
    val rdd1: RDD[String] = sc.textFile("src/main/resources/wc.txt")

    val rdd2: RDD[String] = rdd1.flatMap(x => {
      println("-------------------------")
      x.split(" ")
    })
    rdd2.cache()
    val rdd3: RDD[(String, Int)] = rdd2.map(x => (x, 1))

    val rdd4: RDD[Int] = rdd2.map(x => x.size)

    rdd3.collect()
    rdd4.collect()

    Thread.sleep(10000000)
  }

}

正确答案是3条
一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式

发现有个绿色点
一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式
发现cache存到memory里面
一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式
RDD的持久化分为
缓存

  • 数据保存位置: task所在主机内存/本地磁盘中

  • 数据保存时机: 在缓存所在第一个Job执行过程中进行数据保存

  • 使用: rdd.cache()/rdd.persist()/rdd.persist(StorageLevel.XXXX)

  • cache与persist的区别

    • cache是只将数据保存在内存中(cache的底层就是persisit())
      一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式

    • persist是可以指定将数据保存在内存/磁盘中
      一文看懂Spark中Cache和CheckPoint的区别,spark,spark,大数据,分布式

  • 常用的存储级别:

    • StorageLevel.MEMORY_ONLY:只将数据保存在内存中,一般用于小数据量场景
    • StorageLevel.MEMORY_AND_DISK:只将数据保存在内存+磁盘中,一般用于大数据量场景

CheckPoint

看下面代码会打印多少条-------------------------(RDD2) 使用了CheckPoint

import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel.MEMORY_AND_DISK
import org.apache.spark.{SparkConf, SparkContext}

object Cache {
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME", "root")
    val sc = new SparkContext(new SparkConf().setMaster("local[4]").setAppName("test"))
    sc.setCheckpointDir("hdfs://hadoop102:8020/sparkss")


    val rdd1: RDD[String] = sc.textFile("src/main/resources/wc.txt")

    val rdd2: RDD[String] = rdd1.flatMap(x => {
      println("-------------------------")
      x.split(" ")
    })
    rdd2.checkpoint()
    val rdd3: RDD[(String, Int)] = rdd2.map(x => (x, 1))

    val rdd4: RDD[Int] = rdd2.map(x => x.size)

    rdd3.collect()
    rdd4.collect()
    rdd4.collect()


    Thread.sleep(10000000)
  }

}

正确答案是6条,无论你有多少个行动算子,他都是6条,因为在checkpoint rdd所在第一个job执行完成之后,会单独触发一个job计算得到rdd数据之后保存。

为什么要用CheckPoint的原因
缓存是将数据保存在主机磁盘/内存中,如果服务器宕机数据丢失,需要重新根据依赖关系计算得到数据,需要花费大量时间,所以需要将数据保存在可靠的存储介质HDFS中,避免后续数据丢失重新计算。

  • 数据保存位置: HDFS
  • 数据保存时机: 在checkpoint rdd所在第一个job执行完成之后,会单独触发一个job计算得到rdd数据之后保存。
  • 使用
    • 1、设置保存数据的目录: sc.setCheckpointDir(path)
    • 2、保存数据: rdd.checkpoint

checkpoint会单独触发一个job执行得到数据之后保存,所以导致数据重复计算,此时可以搭配缓存使用: rdd.cache() + rdd.checkpoint(这样只会产生3条)

import org.apache.spark.rdd.RDD
import org.apache.spark.storage.StorageLevel.MEMORY_AND_DISK
import org.apache.spark.{SparkConf, SparkContext}

object Cache {
  def main(args: Array[String]): Unit = {
    System.setProperty("HADOOP_USER_NAME", "root")
    val sc = new SparkContext(new SparkConf().setMaster("local[4]").setAppName("test"))
    sc.setCheckpointDir("hdfs://hadoop102:8020/sparkss")


    val rdd1: RDD[String] = sc.textFile("src/main/resources/wc.txt")

    val rdd2: RDD[String] = rdd1.flatMap(x => {
      println("-------------------------")
      x.split(" ")
    })
    rdd2.cache()
    rdd2.checkpoint()
    val rdd3: RDD[(String, Int)] = rdd2.map(x => (x, 1))

    val rdd4: RDD[Int] = rdd2.map(x => x.size)

    rdd3.collect()
    rdd4.collect()
    rdd4.collect()


    Thread.sleep(10000000)
  }

}

缓存和CheckPoint的区别

1.数据保存位置不一样

  • 缓存是将数据保存在task所在主机磁盘/内存中
  • checkpoint是将数据保存到HDFS

2、数据保存时机不一样

  • 缓存是rdd所在第一个Job执行过程中进行数据保存
  • checkpoint是rdd所在第一个job执行完成之后保存

3、依赖关系是否保留不一样文章来源地址https://www.toymoban.com/news/detail-753766.html

  • 缓存是将数据保存在task所在主机磁盘/内存中,所以服务器宕机数据丢失,需要根据依赖关系重新计算得到数据,所以rdd的依赖不能切除。
  • checkpoint是将数据保存到HDFS,数据不会丢失,所以rdd的依赖后续就用不到了,会切除。

到了这里,关于一文看懂Spark中Cache和CheckPoint的区别的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Spark大数据分析与实战笔记(第三章 Spark RDD 弹性分布式数据集-02)

    人生很长,不必慌张。你未长大,我要担当。 传统的MapReduce虽然具有自动容错、平衡负载和可拓展性的优点,但是其最大缺点是采用非循环式的数据流模型,使得在迭代计算式要进行大量的磁盘IO操作。Spark中的RDD可以很好的解决这一缺点。 RDD是Spark提供的最重要的抽象概念

    2024年02月22日
    浏览(91)
  • Spark弹性分布式数据集

    1. Spark RDD是什么 RDD(Resilient Distributed Dataset,弹性分布式数据集)是一个不可变的分布式对象集合,是Spark中最基本的数据抽象。在代码中RDD是一个抽象类,代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 每个RDD都被分为多个分区,这些分区运行在集群中

    2024年02月13日
    浏览(56)
  • Spark核心--checkpoint、 广播变量、累加器介绍

    rdd 的优化手段,可以提升计算速度。将计算过程中某个rdd保存在缓存或者hdfs上,在后面计算时,使用该rdd可以直接从缓存或者hdfs上直接读取数据 1-1 缓存使用 1、提升计算速度  2、容错 什么样的rdd需要缓存? 1、rdd的计算时间比较长,获取数据的计算比较复杂 2、rdd被频繁使

    2024年01月16日
    浏览(45)
  • 大数据学习06-Spark分布式集群部署

    配置好IP vim /etc/sysconfig/network-scripts/ifcfg-ens33 修改主机名 vi /etc/hostname 做好IP映射 vim /etc/hosts 关闭防火墙 systemctl status firewalld systemctl stop firewalld systemctl disable firewalld 配置SSH免密登录 ssh-keygen -t rsa 下载Scala安装包 配置环境变量 添加如下配置 使环境生效 验证 Spark官网 解压 上

    2024年02月10日
    浏览(66)
  • 大数据开发之Spark(RDD弹性分布式数据集)

    rdd(resilient distributed dataset)叫做弹性分布式数据集,是spark中最基本的数据抽象。 代码中是一个抽象类,它代表一个弹性的、不可变、可分区、里面的元素可并行计算的集合。 1.1.1 rdd类比工厂生产 1.1.2 wordcount工作流程 1、一组分区(partition),即是数据集的基本组成单位,

    2024年01月24日
    浏览(65)
  • 大数据课程K2——Spark的RDD弹性分布式数据集

    文章作者邮箱:yugongshiye@sina.cn              地址:广东惠州 ⚪ 了解Spark的RDD结构; ⚪ 掌握Spark的RDD操作方法; ⚪ 掌握Spark的RDD常用变换方法、常用执行方法; 初学Spark时,把RDD看做是一个集合类型(类似于Array或List),用于存储数据和操作数据,但RDD和普通集合的区别

    2024年02月12日
    浏览(51)
  • Spark重温笔记(三):Spark在企业中为什么能这么强?——持久化、Checkpoint机制、共享变量与内核调度原理全攻略“

    前言:今天是温习 Spark 的第 3 天啦!主要梳理了 Spark 核心数据结构:RDD(弹性分布式数据集),包括RDD持久化,checkpoint机制,spark两种共享变量以及spark内核调度原理,希望对大家有帮助! Tips:\\\"分享是快乐的源泉💧,在我的博客里,不仅有知识的海洋🌊,还有满满的正能量

    2024年04月09日
    浏览(46)
  • 大数据开源框架环境搭建(七)——Spark完全分布式集群的安装部署

    前言:七八九用于Spark的编程实验 大数据开源框架之基于Spark的气象数据处理与分析_木子一个Lee的博客-CSDN博客_spark舆情分析 目录 实验环境: 实验步骤: 一、解压 二、配置环境变量:  三、修改配置文件  1.修改spark-env.sh配置文件: 2.修改配置文件slaves: 3.分发配置文件:

    2024年02月11日
    浏览(49)
  • 【MySQL】数据库中这么多数据类型你真的了解吗?一文看懂不同数据类型有何区别

    创建表t1,将name列数据类型设置为要tinyint 插入属性值:由于这里是tinyint类型,取值范围是【-128–127】,当插入这个范围内的数据显示成功,范围之外失败 使用tinyint unsigned类型创建表t2 无符号类型取值范围【0,255】,这点与C/C++一样 2.1.1 小结 MySQL对于数据类型不合法行为采

    2024年02月13日
    浏览(41)
  • 一文看懂分布式存储架构

    目录 一、集中存储结构 二、分布式存储 1 、分布式存储的兴起 2 、分布式存储的重要性 3 、分布式存储的种类和比较 三、分布式理论浅析 1 、一致性和可用性 2 、数据分布 3 、复制 4 、分布式协议 5、跨机房部署 四、分布式文件系统 1、 Google 文件系统( GFS ) 2、 Taobao 文件

    2023年04月09日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包