RDD

作者: 吹洞箫饮酒杏花下 | 来源:发表于2018-03-20 15:41 被阅读0次

1.RDD设计背景

在实际应用中,存在许多迭代式算法(比如机器学习、图算法等)和交互式数据挖掘工具,这些应用场景的共同之处是,不同计算阶段之间会重用中间结果,即一个阶段的输出结果会作为下一个阶段的输入。但是,目前的MapReduce框架都是把中间结果写入到HDFS中,带来了大量的数据复制、磁盘IO和序列化开销。RDD就是为了满足这种需求而出现的,它提供了一个抽象的数据架构,我们不必担心底层数据的分布式特性,只需将具体的应用逻辑表达为一系列转换处理,不同RDD之间的转换操作形成依赖关系,可以实现管道化,从而避免了中间结果的存储

2.RDD概念

一个RDD就是一个分布式对象集合,本质上是一个只读的分区记录集合,每个RDD可以分成多个分区每个分区就是一个数据集片段,并且一个RDD的不同分区可以被保存到集群中不同的节点上,从而可以在集群中的不同节点上进行并行计算

RDD提供了一种高度受限的共享内存模型,即RDD是只读的记录分区的集合,不能直接修改,只能基于稳定的物理存储中的数据集来创建RDD,或者通过在其他RDD上执行确定的转换操作(如map、join和groupBy)而创建得到新的RDD。

RDD提供了一组丰富的操作以支持常见的数据运算,分为

“行动”(Action):前者用于执行计算并指定输出的形式。比如count、collect等,接受RDD但是返回非RDD(即输出一个值或结果)。

“转换”(Transformation):后者指定RDD之间的相互依赖关系。比如map、filter、groupBy、join等,接受RDD并返回RDD。

RDD提供的转换接口都非常简单,都是类似map、filter、groupBy、join等粗粒度的数据转换操作,而不是针对某个数据项的细粒度修改。因此,RDD比较适合对于数据集中元素执行相同操作批处理式应用,而不适合用于需要异步、细粒度状态的应用。

RDD典型的执行过程如下:

1. RDD读入外部数据源(或者内存中的集合)进行创建

2. RDD经过一系列的“转换”操作,每一次都会产生不同的RDD,供给下一个“转换”使用;

3. 最后一个RDD经“行动”操作进行处理,并输出到外部数据源(或者变成Scala集合或标量)。

RDD采用了惰性调用,即在RDD的执行过程中,真正的计算发生在RDD的“行动”操作,对于“行动”之前的所有“转换”操作,Spark只是记录下“转换”操作应用的一些基础数据集以及RDD生成的轨迹,即相互之间的依赖关系,而不会触发真正的计算。只有“行动”操作的时候,Spark才会根据RDD的依赖关系生成DAG,并从起点开始真正的计算。

3. RDD特性

(1)高效的容错性。数据只读,不可修改,如果需要修改数据,必须从父RDD转换到子RDD,由此在不同RDD之间建立了血缘关系。所以,RDD是一种天生具有容错机制的特殊集合,不需要通过数据冗余的方式(比如检查点)实现容错,而只需通过RDD父子依赖(血缘)关系重新计算得到丢失的分区来实现容错,无需回滚整个系统,这样就避免了数据复制的高开销,而且重算过程可以在不同节点之间并行进行,实现了高效的容错。此外,RDD提供的转换操作都是一些粗粒度的操作(比如map、filter和join),RDD依赖关系只需要记录这种粗粒度的转换操作,而不需要记录具体的数据和各种细粒度操作的日志,大大降低了数据密集型应用中的容错开销;

(2)中间结果持久化到内存。数据在内存中的多个RDD操作之间进行传递,不需要“落地”到磁盘上,避免了不必要的读写磁盘开销

(3)存放的数据可以是Java对象,避免了不必要的对象序列化和反序列化开销

相关文章

  • RDD的依赖关系:宽依赖和窄依赖

    RDD之间的依赖关系是指RDD之间的上下来源关系,RDD2依赖RDD1,RDD4依赖于RDD2和RDD3,RDD7...

  • RDD(二)

    class RDD源码解析 1.1 RDD源码 1.2 RDD类解释 1.3 RDD class中如何体现RDD的...

  • Spark Core2--LineAge

    Lineage RDD Lineage(又称为RDD运算图或RDD依赖关系图)是RDD所有父RDD的graph(图...

  • RDD详解

    RDD基本操作(引用) 1、RDD是什么 RDD:Spark的核心概念是RDD (resilientdistrib...

  • 【Spark入门-笔记】RDD编程

    1 RDD基础 2 创建RDD-两种方式 2.1 进行并行化创建RDD 2.2 读取数据创建RDD 3 RDD操作...

  • SPARK[RDD之转换函数]

    前面讲到了RDD的分区、RDD的创建,这节将讲解RDD的转换,RDD的转换就是从父RDD生成一个新的RDD,新的R...

  • Spark-core:Spark的算子

    目录一.RDD基础1.什么是RDD2.RDD的属性3.RDD的创建方式4.RDD的类型5.RDD的基本原理二.Tr...

  • Spark中repartition和coalesce的用法

    在Spark的Rdd中,Rdd是分区的。 有时候需要重新设置Rdd的分区数量,比如Rdd的分区中,Rdd分区比较多...

  • Spark中对RDD的理解

    Spark中对RDD的理解 简介 what the is RDD? RDD(Resilient Distribut...

  • Spark RDD

    一、RDD概述 1.1 什么是RDD? RDD(Resilient Distributed Dataset)叫做弹...

网友评论

      本文标题:RDD

      本文链接:https://www.haomeiwen.com/subject/vvqbqftx.html