zoukankan      html  css  js  c++  java
  • Spark RDD详解

    1.RDD是什么

    RDD(Resilient Distributed Dataset):是Spark的核心数据结构,指的是一个只读的、可分区的分布式数据集,这个数据集的全部或部分可以缓存在内存中,在多次计算间重用。
     RDD 是只读的
     RDD 是分区记录的集合
     RDD 是容错的
     RDD 是高效的
     RDD 不需要物化
     RDD 可以缓存的

    2.RDD的产生

    1.传统的MapReduce虽然具有自动容错、平衡负载和可拓展性的优点,但是其最大缺点是采用非循环式的数据流模型,使得在迭代计算式要进行大量的磁盘IO操作。RDD正是解决这一缺点的抽象方法。
    2. RDD的具体描述RDD(弹性数据集)是Spark提供的最重要的抽象的概念,它是一种有容错机制的特殊集合,可以分布在集群的节点上,以函数式编操作集合的方式,进行各种并行操作。可以将RDD理解为一个具有容错机制的特殊集合,它提供了一种只读、只能有已存在的RDD变换而来的共享内存,然后将所有数据都加载到内存中,方便进行多次重用。①它是分布式的,可以分布在多台机器上,进行计算。②它是弹性的,计算过程中内存不够时它会和磁盘进行数据交换。③这些限制可以极大的降低自动容错开销。④实质是一种更为通用的迭代并行计算框架,用户可以显示的控制计算的中间结果,然后将其自由运用于之后的计算。
    3. RDD的容错机制实现分布式数据集容错方法有两种:数据检查点和记录更新RDD采用记录更新的方式:记录所有更新点的成本很高。所以,RDD只支持粗颗粒变换,即只记录单个块上执行的单个操作,然后创建某个RDD的变换序列(血统)存储下来;变换序列指,每个RDD都包含了他是如何由其他RDD变换过来的以及如何重建某一块数据的信息。因此RDD的容错机制又称“血统”容错。 要实现这种“血统”容错机制,最大的难题就是如何表达父RDD和子RDD之间的依赖关系。

    3.RDD在Spark中的地位及作用

    Spark解决迭代计算的主要实现思想就是RDD,把所有计算的数据保存在分布式的内存中。迭代计算通常情况下都是对同一个数据集做反复的迭代计算,数据在内存中将大大提升IO操作。这也是Spark涉及的核心:内存计算。Spark和RDD的关系可以理解为:RDD是一种具有容错性基于内存的集群计算抽象方法,Spark则是这个抽象方法的实现。

    4.RDD的创建方式

     从普通Scala集合创建,如:val arrRDD = sc. parallelize(0 to 9)
     从Hadoop文件系统或与Hadoop兼容的其他持久化存储系统创建,如Hive、HBase。如:val textFile = sc.textFile("hdfs://...")
     从父RDD转换得到新的RDD

    5.父RDD与子RDD的依赖关系

    窄依赖(narrow dependencies)
     子RDD的每个分区依赖于常数个父RDD分区(即与数据规模无关)
     输入输出一对一的算子,且结果RDD的分区结构不变,如map、flatMap
     输入输出一对一,但结果RDD的分区结构发生变化,如union、coalesce
     从输入中选择部分元素的算子,如filter、distinct、subtract、sample
    宽依赖(wide dependencies)
     子RDD的每个分区依赖于所有父RDD分区
     对单个RDD基于Key进行重组和Reduce,如groupByKey、reduceByKey
     对两个RDD基于Key进行Join和重组,如join

    6.RDD的两种操作算子

     Transformation
    Transformation操作是延迟计算的,即从一个RDD转换成另一个RDD的转换操作不是 马上执行,需要等到有Action操作时,才真正出发执行。
    常用的Transformation函数:



     Action
    Action算子会出发Spark提交作业(Job),并将数据输出到Spark系统。
    常用的Action函数:



    相关文献:

    http://f.dataguru.cn/thread-475874-1-1.html

    《Spark大数据处理》


    版权声明:本文为博主原创文章,未经博主允许不得转载。

  • 相关阅读:
    python的冒泡法和二分法的总结
    python生成器应用中的一个要点
    Dart 入门初体验
    使用 mui jquery javascript 实现智能提示功能
    mui 输入框调整字体的样式
    人人商城怎样自定义的会员中心页,让不同用户组看到不同的列表导航
    人人商城 微信支付提示 当前页面的URL未注册
    通过 PDO 实现简单的 CRUD
    PHPStorm 通过 Material Theme UI 设置新主题
    CodeIgniter 3.x 学习笔记
  • 原文地址:https://www.cnblogs.com/GatsbyNewton/p/4776680.html
Copyright © 2011-2022 走看看