这段伪代码的瑕疵:

lines = sc.textFile(“hdfs://...”)
errors = lines.filter(_.startsWith(“ERROR”))
mysql_errors = errors.filter(_.contain(“MySQL”)).count
http_errors = errors.filter(_.contain(“Http”)).count

errors 是一个 RDD,mysql_errors 这个 RDD 执行时,会先读文件,然后获取数据,通过计算 errors,把数据传给 mysql_errors,再进行计算,因为 RDD 中是不存储数据的,所以 http_errors 计算的时候会重新读数据,计算 errors 后把数据传给 http_errors 进行计算,重复使用 errors 这个 RDD 很有必须,这就需要把 errors 这个 RDD 持久化,以便其他 RDD使用。

RDD 持久化有三个算子:cache、persist、checkpoint

  • cache:把 RDD 持久化到内存

使用方法:

var rdd = sc.textFile("test")
rdd = rdd.cache()
val count = rdd.count() //或者其他操作
  • persist:可以选择多种持久化方式

使用方法:

var rdd = sc.textFile("test")
rdd = rdd.persist(StorageLevel.MEMORY_ONLY)
val count = rdd.count() //或者其他操作

Persist StorageLevel 说明:

class StorageLevel private(
private var _useDisk: Boolean,
private var _useMemory: Boolean,
private var _useOffHeap: Boolean,
private var _deserialized: Boolean,
private var _replication: Int = 1)

初始化 StorageLevel 可以传入 5 个参数,分别对应是否存入磁盘、是否存入内存、是否使用堆外内存、是否不进行序列化,副本数(默认为 1)

使用不同参数的组合构造的实例被预先定义为一些值,比如 MEMORY_ONLY 代表着不存入磁盘,存入内存,不使用堆外内存,不进行序列化,副本数为 1,使用 persisit()方法时把这些持久化的级别作为参数传入即可,cache()与 persist( StorageLevel. MEMORY_ONLY)是等价的。

cache 和 persist 的注意事项

1.  cache 和 persist 是懒执行算子,需要有一个 action 类的算子触发执行
2.  cache 和 persist 算子的返回执行必须赋值给一个变量,在接下来的 job 中直接使用这
个变量,那么就是使用了持久化的数据了,如果 application 中只有一个 job,没有必要
使用 RDD 持久化
3.  cache 和 persist 算子后不能立即紧跟 action 类算子,比如 count 算子,但是在下一行
可以有 action 类算子
error : cache().count()
right : rdd = rdd.cache() rdd.count()
4.  cache() = persist(StorageLevel.MEMORY_ONLY)

  • checkpoint : 可以把 RDD 持久化到 HDFS,同时切断 RDD 之间的依赖

使用方法:

sc.setCheckpointDir("hdfs://...")
var rdd = sc.textFile("test")
rdd.checkpoint()
val count = rdd.count() //或者其他操作

对于切断 RDD 之间的依赖的说明:
当业务逻辑很复杂时,RDD 之间频繁转换,RDD 的血统很长,如果中间某个 RDD 的数据丢失,还需要重新从头计算,如果对中间某个 RDD 调用了 checkpoint()方法,把这个RDD 上传到 HDFS,同时让后面的 RDD 不再依赖于这个 RDD,而是依赖于 HDFS 上的数据,那么下次计算会方便很多。

checkpoint()执行原理:
1.  当 RDD 的 job 执行完毕后,会从 finalRDD 从后往前回溯
2.  当回溯到调用了 checkpoint()方法的 RDD 后,会给这个 RDD 做一个标记
3.  Spark 框架自动启动一个新的 job,计算这个 RDD 的数据,然后把数据持久化到 HDFS上
4.  优化:对某个 RDD 执行 checkpoint()之前,对该 RDD 执行 cache(),这样的话,新启动的 job 只需要把内存中的数据上传到 HDFS 中即可,不需要重新计算

谈一谈RDD 持久化的三个算子:cache、persist、checkpoint相关推荐

  1. .net mysql和php mysql数据库连接_浅谈PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  2. 嵌入式开发-浅谈嵌入式MCU开发中的三个常见误区

    浅谈嵌入式MCU开发中的三个常见误区 原创 2017-09-30 胡恩伟 汽车电子expert成长之路 目录 (1)嵌入式MCU与MPU的区分 (2)误区一:MCU的程序都是存储在片上Flash上,然 ...

  3. 先查询再插入的存储过程怎么写_谈一谈 InnoDB(1) - 底层存储文件结构

    看技术文章是不是很累呢, 这次来个轻松点的~来谈一谈MySQL最主流的数据库引擎 InnoDB 吧~ 序 老王走进一号会议室, 随手打开了灯, 小张紧随其后 "王哥, 找我来干啥啊" ...

  4. 【建站系列教程】5、谈一谈网站的静态化

    [建站系列教程]5.谈一谈网站的静态化[进阶] 动态页面?静态页面?伪静态页面? 三个页面有何优缺点? 为什么要让网页静态化 如何网页伪静态化? 写在前面:大家好,我是热爱编程的小泽. [建站系列教程 ...

  5. 谈一谈周公所理解的面试

    因为公司最近招聘的力度很大,所以最近公司的面试很多,加之很多同事项目紧,所以让我参加了一些技术面试.不论是作为面试官还是应聘者,参加工作以来我参与的面试的次数我自己也记不清了,所以在此想从面试官和应聘 ...

  6. 我从阿里面试回来,想和Java程序猿谈一谈

    最近小编看了一篇关于面试的文章,题目是"我从阿里面试回来,想和Java程序员谈一谈",内容不是讲面试前刷题,而是更加聚焦在面试前如何准备,以及工作当中如何学习.感觉总结的很不错,今 ...

  7. Java程序员谈一谈-----java程序员成长之路

    转载:http://www.banzg.com/archives/679.html?ref=myread 阿里面试回来,想和Java程序员谈一谈 引言 其实本来真的没打算写这篇文章,主要是LZ得记忆力 ...

  8. 谈一谈并查集QAQ(上)

    最近几日理了理学过的很多oi知识...发现不知不觉就有很多的知识忘记了... 在聊聊并查集的时候顺便当作巩固吧.... 什么是并查集呢? ( Union Find Set ) 是一种用于处理分离集合的 ...

  9. 阿里面试回来,想和 Java 程序员谈一谈

    转载自 阿里面试回来,想和 Java 程序员谈一谈! 第一个问题:阿里面试都问什么? 这个是让LZ最头疼的一个问题,也是群里的猿友们问的最多的一个问题.说实话,LZ只能隐约想起并发.JVM.分布式.T ...

最新文章

  1. 匹夫细说C#:委托的简化语法,聊聊匿名方法和闭包
  2. HTML5存储学习笔记(一)
  3. linux 读取大量图片 内存,10 张图帮你搞定 TensorFlow 数据读取机制
  4. 34.16.159(zz)
  5. jQuery选择器整理
  6. 网页禁用鼠标右键和复制功能兼容方式
  7. 表达式封装和模型驱动封装的区别
  8. c++矩阵类_面向对象有限元编程|单元类
  9. 详解spring框架入门到精通
  10. VMware关闭自启动
  11. linux sysvinit 机制,Linux基于SysVinit和systemd实现开机自启动服务
  12. Builder模式——自由扩展你的项目
  13. 机器学习与深度学习入门篇
  14. 2015 Visual-lidar Odometry and Mapping:Low-drift,Robust,and Fast
  15. PS教程 | 美女面部剥落碎片效果
  16. 中国居民身份证上的信息英语翻译
  17. C++ 九阴真经之线程安全单例类
  18. python爬虫实战--爬取猫眼专业版-实时票房
  19. 当代大学生应该加强礼仪修养
  20. BLAST Database error: No alias or index file found for protein database

热门文章

  1. CodeForces - 1480C Searching Local Minimum(交互+二分)
  2. CodeForces - 1547G How Many Paths?(强联通缩点+拓扑)
  3. CodeForces - 1501C Going Home(鸽巢原理+暴力)
  4. CodeForces - 1450C2 Errich-Tac-Toe (Hard Version)(思维+构造)
  5. 2019ICPC(上海) - Color Graph(二分图+状态压缩)
  6. HDU - 6333 Problem B. Harvest of Apples(莫队变形+思维+组合数学,好题)
  7. 【Boost】boost库中智能指针——scoped_ptr
  8. cocos2d-x游戏实例(25)-简易动作游戏(3)
  9. Websniff -aspx网页嗅探工具及使用说明
  10. 开箱即用的微服务框架 Go-zero(进阶篇)