美文网首页
RDD 科普

RDD 科普

作者: Wille_Li | 来源:发表于2019-04-03 18:19 被阅读0次

Spark 基础

Apache Spark™ is a unified analytics engine for large-scale data processing.
ApacheSpark™是用于大规模数据处理的统一分析引擎。

Spark 引擎核心架构

ClusterManager:在Standalone模式中即为Master(主节点),控制整个集群,监控Worker。在YARN模式中为资源管理器。
Driver:运行Application的main()函数并创建SparkContext。
Worker:从节点,负责控制计算节点,启动Executor或Driver。在YARN模式中为NodeManager,负责计算节点的控制
Executor:执行器,在worker node上执行任务的组件、用于启动线程池运行任务。每个Application拥有独立的一组Executors。
SparkContext:整个应用的上下文,控制应用的生命周期
在这个大规模数据处理 的基础数据结构。
RDD:Spark的基本计算单元,一组RDD可形成执行的有向无环图RDD Graph

什么是 RDD

全称叫做弹性分布式数据集(Resilient Distributed Datasets),它是一种分布式的内存抽象,表示一个只读的记录分区的集合,它只能通过其他RDD转换而创建。

特点:

  • 分区

如上图所示,RDD逻辑上是分区的,每个分区的数据是抽象存在的,计算的时候会通过一个compute函数得到每个分区的数据。
如果RDD是通过已有的文件系统构建,则compute函数是读取指定文件系统中的数据
如果RDD是通过其他RDD转换而来,则compute函数是执行转换逻辑将其他RDD的数据进行转换

  • 只读

如下图所示,RDD是只读的,要想改变RDD中的数据,只能在现有的RDD基础上创建新的RDD。


RDD 表示只读的分区的数据集,对RDD进行改动,只能通过RDD的转换操作,由一个RDD得到一个新的RDD,新的RDD包含了从其他RDD衍生所必需的信息。

由一个RDD转换到另一个RDD,可以通过丰富的操作算子实现,不再像MapReduce那样只能写map和reduce了,如下图所示。

RDD的操作算子包括两类,一类叫做transformations,它是用来将RDD进行转化,构建RDD的血缘关系;另一类叫做actions,它是用来触发RDD的计算,得到RDD的相关计算结果或者将RDD保存的文件系统中。下图是RDD所支持的操作算子列表。

Transformation返回值还是一个RDD。它使用了链式调用的设计模式,对一个RDD进行计算后,变换成另外一个RDD,然后这个RDD又可以进行另外一次转换。这个过程是分布式的
Action返回值不是一个RDD。它要么是一个Scala的普通集合,要么是一个值,要么是空,最终或返回到Driver程序,或把RDD写入到文件系统中

Transformations转换操作,返回值还是一个 RDD,如 map、 filter、 union;
Actions行动操作,返回结果或把RDD持久化起来,如 count、 collect、 save。

  • 依赖

RDDs之间存在依赖,RDD的执行是按照血缘关系延时计算的。如果血缘关系较长,可以通过持久化(checkpoint)RDD来切断血缘关系。

通过RDDs之间的这种依赖关系,一个任务流可以描述为DAG(有向无环图),如下图所示,在实际执行过程中宽依赖对应于Shuffle(图中的reduceByKey和join),窄依赖中的所有转换操作可以通过类似于管道的方式一气呵成执行(图中map和union可以一起执行)。

  • 缓存

如果在应用程序中多次使用同一个RDD,可以将该RDD缓存起来,该RDD只有在第一次计算的时候会根据血缘关系得到分区的数据,在后续其他地方用到该RDD的时候,会直接从缓存处取而不用再根据血缘关系计算,这样就加速后期的重用。如下图所示,RDD-1经过一系列的转换后得到RDD-n并保存到hdfs,RDD-1在这一过程中会有个中间结果,如果将其缓存到内存,那么在随后的RDD-1转换到RDD-m这一过程中,就不会计算其之前的RDD-0了。

缓存方法: cache,persist

缓存级别

优先位置(preferred location)

每个分片的优先计算位置,Spark在进行任务调度的时候,会尽可能滴将计算任务分配到所需数据块的存储位置,满足“移动计算优先移动数据”的理念。

RDD 持久化(checkpoint)

虽然RDD的血缘关系天然地可以实现容错,当RDD的某个分区数据失败或丢失,可以通过血缘关系重建。但是对于长时间迭代型应用来说,随着迭代的进行,RDDs之间的血缘关系会越来越长,一旦在后续迭代过程中出错,则需要通过非常长的血缘关系去重建,势必影响性能。
为此,RDD支持checkpoint将数据保存到持久化的存储中,这样就可以切断之前的血缘关系,因为checkpoint后的RDD不需要知道它的父RDDs了,它可以从checkpoint处拿到数据。

小结

RDD 的属性特征:分区、函数、依赖、优先位置、分区策略;

RDD 缓存:持久化等级、主动持久化、自动持久化;

RDD 的操作:Transformation、Action;

RDD 依赖:窄依赖、宽依赖。

相关文章

  • RDD 科普

    Spark 基础 Apache Spark™ is a unified analytics engine for ...

  • 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...

网友评论

      本文标题:RDD 科普

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