【Spark】RDD的依赖关系和缓存相关知识点

601-赵同学

发表文章数:191

热门标签

, , ,
首页 » 大数据 » 正文


RDD的依赖关系

RDD和它依赖的父RDD的关系有两种不同的类型,即窄依赖(narrow dependency)宽依赖(wide dependency)
【Spark】RDD的依赖关系和缓存相关知识点

宽依赖

宽依赖指的是子RDD中的数据来源于父RDD中的多个分区,其实就是产生了shuffle

窄依赖

窄依赖指的是子RDD中的数据来源于父RDD当中的一个分区,也即没有产生shuffle

血统

Lineage —— 根据rdd之间的依赖关系,将依赖关系给记录下来叫做血统。
比如:

rdd1 ==> rdd2 ==> rdd3 ==> rdd4
记录下来每一个rdd的父rdd是谁,也记录下来每一个rdd的子rdd是谁,可以帮助我们做容灾


RDD缓存

概述

Spark速度非常快的原因之一,就是在不同操作中可以在内存中持久化或者缓存数据集。当持久化某个RDD后,每一个节点都将把计算分区结果保存在内存中,对此RDD或衍生出的RDD进行的其他动作中重用。这使得后续的动作变得更加迅速。RDD相关的持久化和缓存,是Spark最重要的特征之一。可以说,缓存是Spark构建迭代式算法和快速交互式查询的关键。

缓存方式

通过查看StorageLevel的源码可以拿到

object StorageLevel {
  //不缓存
  val NONE = new StorageLevel(false, false, false, false)
  //只在硬盘缓存
  val DISK_ONLY = new StorageLevel(true, false, false, false)
  //在硬盘缓存两份
  val DISK_ONLY_2 = new StorageLevel(true, false, false, false, 2)
  //只在内存缓存
  val MEMORY_ONLY = new StorageLevel(false, true, false, true)
  //在内存缓存两份
  val MEMORY_ONLY_2 = new StorageLevel(false, true, false, true, 2)
  //在内存序列化缓存
  val MEMORY_ONLY_SER = new StorageLevel(false, true, false, false)
  //在内存序列化缓存两份
  val MEMORY_ONLY_SER_2 = new StorageLevel(false, true, false, false, 2)
  //同时在内存和硬盘缓存
  val MEMORY_AND_DISK = new StorageLevel(true, true, false, true)
  //同时在内存和硬盘缓存两份(推荐)
  val MEMORY_AND_DISK_2 = new StorageLevel(true, true, false, true, 2)
  //同时在内存和硬盘序列化缓存
  val MEMORY_AND_DISK_SER = new StorageLevel(true, true, false, false)
  //同时在内存和硬盘序列化缓存两份
  val MEMORY_AND_DISK_SER_2 = new StorageLevel(true, true, false, false, 2)
  //对外内存
  val OFF_HEAP = new StorageLevel(false, false, true, false)
  ......
}

两种方法:
1.cache(),其实底层就是调用了persist,将数据仅仅的放到内存里面去,放一份
2.persist()
 (1)无参,也是将只在内存中缓存一份数据
 (2)带StorageLevel参数,一般选择MEMORY_AND_DISK_2

未经允许不得转载:作者:601-赵同学, 转载或复制请以 超链接形式 并注明出处 拜师资源博客
原文地址:《【Spark】RDD的依赖关系和缓存相关知识点》 发布于2020-04-13

分享到:
赞(0) 打赏

评论 抢沙发

评论前必须登录!

  注册



长按图片转发给朋友

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

支付宝扫一扫打赏

微信扫一扫打赏

Vieu3.3主题
专业打造轻量级个人企业风格博客主题!专注于前端开发,全站响应式布局自适应模板。

登录

忘记密码 ?

您也可以使用第三方帐号快捷登录

Q Q 登 录
微 博 登 录