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

      

  • 相关阅读:
    编译原理-第二章 一个简单的语法指导编译器-2.4 语法制导翻译
    编译原理-第二章 一个简单的语法指导编译器-2.3 语法定义
    编译原理-第二章 一个简单的语法指导编译器-2.2 词法分析
    LeetCode 1347. Minimum Number of Steps to Make Two Strings Anagram
    LeetCode 1348. Tweet Counts Per Frequency
    1349. Maximum Students Taking Exam(DP,状态压缩)
    LeetCode 1345. Jump Game IV(BFS)
    LeetCode 212. Word Search II
    LeetCode 188. Best Time to Buy and Sell Stock IV (动态规划)
    LeetCode 187. Repeated DNA Sequences(位运算,hash)
  • 原文地址:https://www.cnblogs.com/jiangbei/p/8716261.html
Copyright © 2011-2022 走看看