0


RDD简介

RDD概念

RDD(Resilient Distributed Dataset)叫做弹性分布式数据集,是Spark中最基本的数据抽象,是spark core的底层核心,它代表一个不可变、可分区、里面的元素可并行计算的集合。

  • Dataset:就是一个集合,存储很多数据.
  • Distributed:它内部的元素进行了分布式存储,方便于后期进行分布式计算.
  • Resilient:表示弹性,rdd的数据是可以保存在内存或者是磁盘中.

RDD 五大属性

  1. A list of partitions RDD 是 一组Partition的列表。 在Spark中任务是以task线程的方式运行,一个Partition就对应一个task线程。
  2. A function for computing each split Spark 中 RDD 的计算是以 Partition 为单位的,每个 RDD 都会实现compute()函数以达到这个目的。 compute()函数会对迭代器进行复合,不需要保存每次计算的结果。
  3. A list of dependencies on other RDDs RDD之间存在依赖关系。由于 RDD 是只读的数据集,如果对 RDD 中的数据进行改动,就只能通过 Transformation 操作,由一个或多个 RDD 计算生成一个新的 RDD,所以 RDD 之间就会形成类似 Pipeline的前后依赖关系,前面的称为parent RDD,后面的称为child RDD。当计算过程中出现异常情况导致部分 Partition 数据丢失时,Spark 可以通过这种依赖关系从父 RDD 中重新计算丢失的分区数据,而不需要对 RDD 中的所有分区全部重新计算,以提高迭代计算性能。
  4. A Partitoner for key-value RDDs 可选,针对 Key-Value 型 RDD 的 Partitioner(分区函数)。只有对于 Key-Value 型的 RDD,才会有 Partitioner,非 Key-Value 型的 RDD 的 Partitioner 值是 None。 当前,SPARK实现了两种类型的Partitioner,可控制Key分到哪个Reducer:
  • 基于Hash的HashPartitioner
  • 基于Range的RangePartitioner
  1. A list of preferred locations to compute each split on 可选,一个存储每个 Partition 的Preferred Location(优先位置)的列表。 对于每个 HDFS 文件来说,这个列表保存的就是每个 Partition 所在 block 的位置。 按照“移动数据不如移动计算”的理念,Spark 在进行任务调度的时候,会尽可能地优先将计算任务分配到其所要处理的 block 的存储位置,减少数据的网络传输,提升计算效率。

RDD 核心结构

  1. Partition RDD 内部的数据集在逻辑上和物理上都被划分为了多个 Partitions。
  2. Dependency RDD 之间的依赖关系又分为Narrow Dependency(窄依赖)和Wide Dependency(宽依赖)。
  • Narrow Dependency:parent RDD中的每个Partition数据最多只能被child RDD中的一个Partition所使用,例如map、filter、union等操作都会产生Narrow Dependency。
  • Wide Dependency:parent RDD中的每个Partition数据可以被child RDD中的多个Partition所使用, 例如 groupByKey、reduceByKey、sortByKey 等操作都会产生Wide Dependency。

在这里插入图片描述

  1. Partitioner 针对 Key-Value 型 RDD 的 Partitioner(分区函数)。
  2. Stage 当 Spark 执行作业时,会根据 RDD 之间的宽窄依赖关系,将 DAG 划分成多个相互依赖的 Stage。

Spark 划分 Stage 的整体思路是,按照倒序从后往前推:
如果遇到 RDD 之间为窄依赖,由于 Partition 依赖关系的确定性,Transformation 操作可以在同一个线程里完成,窄依赖就被划分到同一个 Stage 中;
如果遇到 RDD 之间为宽依赖,则划分到一个新的 Stage 中,且新的 Stage 为之前 Stage 的 Parent,然后依次类推递归执行,Child Stage 需要等待所有的 Parent Stages 执行完成后才可以执行。
这样每个 Stage 内的 RDD 都尽可能在各个节点上并行地被执行,以提高运行效率。

Stage Split

  1. Preferred Location Preferred Location(优先位置)是用于存储每个 Partition 优先位置的列表。
  2. CheckPoint CheckPoint 是 Spark 提供的一种基于快照的缓存容错机制。

RDD算子

RDD的算子可以分为两类

  • Transformation:对已有的 RDD 进行转换生成新的 RDD,转换的过程采用惰性求值计算机制,不会立即触发执行实际的转换,而是先记录 RDD 之间的转换关系,只有当触发 Action 操作时才会真正地执行转换,并返回计算结果,以避免所有操作都执行一遍运算,减少数据计算步骤,提高 Spark 运算效率。常用的方法有 map、filter、flatmap、union、groupByKey 等。
  • Action:强制执行求值必须用到的 RDD 的转换操作,对数据集执行实际的计算,并将最终的计算结果返回给 Driver 程序,或者写入到外部存储中。常用到方法有 reduce、collect、count、countByKey、 saveAsTextFile 等。

惰性求值计算机制

Transformation 操作具有 Lazy 特性,是一种惰性求值计算机制。也就是说,调用 Transformation 操作时,Spark 不会立即开始执行真正的计算,而是在内部记录下所要执行的操作的相关信息,待执行 Action 操作时,Spark 才会真正的开始计算。

可见,RDD 不仅可以看作是一个存放分布式数据的数据集,也可以当作是通过 Transformation 操作构建出来的、记录计算指令的列表。

惰性求值计算机制优势

惰性求值计算机制避免了对所有的 RDD 操作都进行一遍运算,其可以将很多操作结合在一起,以减少运算的步骤,使 Spark 的计算运行更高效。


更多关于RDD算子的介绍可看:
RDD的算子说明及操作

标签: spark

本文转载自: https://blog.csdn.net/qinlingheshang/article/details/123253575
版权归原作者 秦岭小和尚 所有, 如有侵权,请联系我们删除。

“RDD简介”的评论:

还没有评论