zoukankan      html  css  js  c++  java
  • 大数据入门第二十二天——spark(二)RDD算子(2)与spark其它特性

     一、JdbcRDD与关系型数据库交互

      虽然略显鸡肋,但这里还是记录一下(点开JdbcRDD可以看到限制比较死,基本是鸡肋。但好在我们可以通过自定义的JdbcRDD来帮助我们完成与关系型数据库的交互。这点和Hadoop需要借助sqoop等工具进行是有优势的!)

      给出一个demo的参考链接:https://www.2cto.com/database/201705/635388.html

    二、RDD依赖关系

      1.窄依赖

      窄依赖指的是每一个父RDD的Partition最多被子RDD的一个Partition使用

      总结:窄依赖我们形象的比喻为独生子女

      2.宽依赖

      宽依赖指的是多个子RDD的Partition会依赖同一个父RDD的Partition

      总结:宽依赖我们形象的比喻为超生(有shuffer的阶段)

      shuffle 是划分 DAG 中 stage 的标识,同时影响 Spark 执行速度的关键步骤. 

      造成了数据在内存中的重新分布,即 shuffle 操作.shuffle 操作是 spark 中最耗时的操作,应尽量避免不必要的 shuffle. 

      3.lineage血统

      RDD只支持粗粒度转换,即在大量记录上执行的单个操作。将创建RDD的一系列Lineage(即血统)记录下来,以便恢复丢失的分区。

      RDD的Lineage会记录RDD的元数据信息和转换行为,当该RDD的部分分区数据丢失时,它可以根据这些信息来重新运算和恢复丢失的数据分区。

     三、RDD缓存

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

      RDD缓存方式:

      RDD通过persist方法或cache方法可以将前面的计算结果缓存,但是并不是这两个方法被调用时立即缓存,而是触发后面的action时,该RDD将会被缓存在计算节点的内存中,并供后面重用。

      

      // 通过查看源码发现cache最终也是调用了persist方法,默认的存储级别都是仅在内存存储一份,Spark的存储级别还有好多种,存储级别在object StorageLevel中定义的。 

      缓存有可能丢失,或者存储存储于内存的数据由于内存不足而被删除,RDD的缓存容错机制保证了即使缓存丢失也能保证计算的正确执行。通过基于RDD的一系列转换,丢失的数据会被重算,由于RDD的各个Partition是相对独立的,因此只需要计算丢失的部分即可,并不需要重算全部Partition

      使用方式:

      在spark-shell中可以通过cache来测试缓存是否真的可用:

    val rdd1 = sc.textFile("hdfs://mini1:9000/input").cache()
    // 上面是一个转换算子,将会在行动算子执行时开始缓存
    rdd1.count
    // 再次执行将会有缓存!(也可以通过UI界面进行查看!)
    rdd1.count

      在代码中同理,具体缓存策略也可以在代码中查看!

      释放缓存:

    rdd.unpersisit(true)

     四、RDD的checkpoint

      checkpoint有点儿类似系统里边的还原点,这样可以方便的回到某个曾经定义的还原点。

      相比利用血统Lineage来重新计算,显然checkpoint会高效很多。保存一些重要的中间结果,非常必要!

      使用示例:需要先设置checkpoint的目录,然后再使用,记住checkpoint也是一个Transformation

          https://www.iteblog.com/archives/1278.html

      使用注意点:最好先进行内存的持久化(例如cache()方法,但是注意cache也是一个Transformation,需要先执行Action才能实际缓存)

          https://blog.csdn.net/xiao_jun_0820/article/details/50475351

    五、Spark执行流程

      参考:https://www.cnblogs.com/1130136248wlxk/articles/6289717.html

      由RDD Object->DAG Scheduler->TaskScheduler->Worker

      

  • 相关阅读:
    三、MyCat主要配置介绍
    二、mycat15种分片规则
    一、mycat介绍
    SpringBoot使用JdbcTemplate批量保存
    linux发布常用命令
    ROS 系统架构及概念
    ROS 在 Ubuntu 18.04 安装
    利用 Skywalking 搭建 APM(应用性能管理)— 安装与配置
    elasticsearch 集群搭建及启动常见错误
    Git 基本操作
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8716261.html
Copyright © 2011-2022 走看看