val count: RDD[(String, Int)] = mapRDD.reduceByKey(_ + _)
count.collect()

val value: RDD[(String, Iterable[(String, Int)])] = mapRDD.groupBy(_._1)
value.collect()

在上面代码中mapRDD转换两次:reduceByKey 和 groupBy,这种情况下RDD是从头执行两遍;性能不高

解决方法:RDD持久化

  mapRDD.cache() 并不会立即持久化,而是在触发后面的action算子时,才会缓存在计算节点的内存中

  mapRDD.persist(StorageLevel.MEMORY_AND_DISK) 可以设置存储级别 内存 或 磁盘

  自己使用,用完后丢弃

检查点:检查点可以切断血缘关系,检查点其实就是将RDD结果写入磁盘(一般是写入HDFS分布式环境)

由于血缘依赖过长会造成容错成本过高,这样就不如在中间阶段做检查点容错,如果检查点之后有节点出现问题,可以从检查点开始重做血缘,减少了开销。

    对RDD进行checkpoint操作并不会马上被执行,必须执行Action操作才能触发

    检查点需要指定磁盘目录,为了安全,检查点会执行两遍RDD(优化方法:持久化和检查点结合使用,先持久化,再检查点)

    mapRDD.cache()
    mapRDD.checkpoint()

RDD持久化和检查点的更多相关文章

  1. Spark RDD概念学习系列之rdd持久化、广播、累加器(十八)

    1.rdd持久化 2.广播 3.累加器 1.rdd持久化 通过spark-shell,可以快速的验证我们的想法和操作! 启动hdfs集群 spark@SparkSingleNode:/usr/loca ...

  2. Spark RDD持久化、广播变量和累加器

    Spark RDD持久化 RDD持久化工作原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中.当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的partition持久化到内 ...

  3. 07、RDD持久化

    为了避免多次计算同一个RDD(如上面的同一result RDD就调用了两次Action操作),可以让Spark对数据进行持久化.当我们让Spark持久化存储一个RDD时,计算出RDD的节点会分别保存它 ...

  4. 【Spark调优】:RDD持久化策略

    [场景] Spark对RDD执行一系列算子操作时,都会重新从头到尾计算一遍.如果中间结果RDD后续需要被被调用多次,可以显式调用 cache()和 persist(),以告知 Spark,临时保存之前 ...

  5. spark rdd持久化的简单对比

    未使用rdd持久化 使用后 通过对比可以发现,未使用RDD持久化时,第一次计算比使用RDD持久化要快,但之后的计算显然要慢的多,差不多10倍的样子 代码 public class PersistRDD ...

  6. 8、RDD持久化

    一.RDD持久化 1.不使用RDD持久化的问题 2.RDD持久化原理 Spark非常重要的一个功能特性就是可以将RDD持久化在内存中.当对RDD执行持久化操作时,每个节点都会将自己操作的RDD的par ...

  7. Spark练习之创建RDD(集合、本地文件),RDD持久化及RDD持久化策略

    Spark练习之创建RDD(集合.本地文件) 一.创建RDD 二.并行化集合创建RDD 2.1 Java并行创建RDD--计算1-10的累加和 2.2 Scala并行创建RDD--计算1-10的累加和 ...

  8. 五、RDD持久化

    Spark最重要的一个功能是它可以通过各种操作(operations)持久化(或者缓存)一个集合到内存中.当你持久化一个RDD的时候,每一个节点都将参与计算的所有分区数据存储到内存中,并且这些数据可以 ...

  9. spark复习笔记(6):RDD持久化

    在spark中最重要的功能之一是跨操作在内存中持久化数据集.当你持久化一个RDD的时候,每个节点都存放了一个它在内存中计算的一个分区,并在该数据集的其他操作中进行重用,持久化一个RDD的时候,节点上的 ...

  10. Spark性能调优篇二之重构RDD架构及RDD持久化

    如果一个RDD在两个地方用到,就持久化他.不然第二次用到他时,会再次计算. 直接调用cache()或者presist()方法对指定的RDD进行缓存(持久化)操作,同时在方法中指定缓存的策略. 原文:h ...

随机推荐

  1. 随时代变迁而进化的治疗策略不断提高RA无药缓解机会[EULAR2015_SAT0058]

    随时代变迁而进化的治疗策略不断提高RA无药缓解机会 SAT0058 DMARD-FREE SUSTAINED REMISSION IN RHEUMATOID ARTHRITIS: AN OUTCOME ...

  2. LeetCode-19 删除链表倒数第N个结点

    来源:力扣(LeetCode)链接:https://leetcode-cn.com/problems/remove-nth-node-from-end-of-list 题目描述 给你一个链表,删除链表 ...

  3. 由于pom文件中依赖了redis,服务中没用到,微服务健康监控会报redis的错误

    在启动类里加 @SpringBootApplication(exclude = RedisAutoConfiguration.class)@MapperScan("com.news.rept ...

  4. pycharm取消代码长度的竖线

  5. JavaScript验证API

    验证API 两个方法: checkValidity():如果input元素中的数据是合法的返回true,否则返回false: setCustomValidity():设置input元素的validat ...

  6. day11_多态&抽象类&接口

    1.多态 1.1 多态的概述(记忆) 什么是多态     同一对象,在不同时刻表现出来的不同形态. 多态的前提 有继承/实现关系 有方法重写 有父类对象的引用执行子类对象 1.2 多态中的成员访问特点 ...

  7. 修复gitlab权限(docker方式搭建)

    docker exec -it gitlab update-permissions docker restart gitlab

  8. Pytest之生成allure报告

    一.前戏 在之前我们已经学会使用 pytest-html 插件生成 html 格式的测试报告: 1 # 第一步,安装插件 2 pip install pytest-html 3 ​ 4 # 第二步,执 ...

  9. CentOS下下查看硬盘型号、大小等信息(含Raid)

    一.普通模式(该机硬盘没有做磁盘阵列) 1.fdisk -l 查看你的硬盘编号,如sda,sdb 等 2.smartctl --all /dev/sda [html] view plain copy ...

  10. SQL Server创建dblink跨库查询

    dblink是跨库查询的主要手段,在Oracle创建DbLink中已经演示了Oracle中如何创建及使用DbLink,这篇博客看看SQL Server中如何使用. 一.通过图形化界面直接创建 选择当前 ...