云应用开发类企业案例RDD依赖RDD依赖.docxVIP

  • 1
  • 0
  • 约2.11千字
  • 约 4页
  • 2021-08-18 发布于北京
  • 举报

云应用开发类企业案例RDD依赖RDD依赖.docx

PAGE4 / NUMPAGES4 RDD依赖 1 RDD特征 分区(partition) 有一个数据分片列表,能够将数据进行切分,切分后的数据能够进行并行计算,是数据集的原子组成部分。 函数 compute 计算每个分片,得出一个可遍历的结果,用于说明在父RDD上执行何种计算。 依赖 dependency 计算每个RDD对父RDD的依赖列表,源RDD没有依赖,通过依赖关系描述血统(lineage)。 优先位置(可选) 每一个分片的优先计算位置(preferred location),HDFS的Block所在的位置就应该是优先计算为止(移动计算而不移动数据)。 分区策略(可选) 描述分区位置和数据存放位置,键值对的RDD根据哈希值进行分区,类似于MR中的Partitioner接口,根据KEY来分配位置 2 RDD依赖 RDD 的容错机制是通过记录更新来实现的,且记录的是粗粒度的转换操作。在外部,我们将记录的信息称为血统(Lineage)关系,而到了源码级别,Apache Spark 记录的则是 RDD 之间的依赖(Dependency)关系。在一次转换操作中,创建得到的新 RDD 称为子 RDD,提供数据的 RDD 称为父 RDD,父 RDD 可能会存在多个,我们把子 RDD 与父 RDD 之间的关系称为依赖关系,或者可以说是子 RDD 依赖于父 RDD。 依赖只保存父 RDD 信息,转换操作的其他信息,如数据处理函数,会在创建 RDD 时候,保存在新的 RDD 内。依赖在 Apache Spark 源码中的对应实现是 Dependency 抽象类。 每个 Dependency 子类内部都会存储一个 RDD 对象,对应一个父 RDD,如果一次转换转换操作有多个父 RDD,就会对应产生多个 Dependency 对象,所有的 Dependency 对象存储在子 RDD 内部,通过遍历 RDD 内部的 Dependency 对象,就能获取该 RDD 所有依赖的父 RDD。 窄依赖 (narrow dependency) 指一个父RDD的分区最多被一个子RDD所使用,表现为一个父RDD的分区对应于 一个子RDD的分区(第一类),或多个父RDD的分区对应于一个子RDD的分区(第二类)。 换句话说,父RDD中的每个分区都是不可分割,它必须被整个得交付给子RDD中的一个分区。下图展示了几类常见的窄依赖及其对应的转换操作 图1 Spark窄依赖 宽依赖(wide dependency)(也成为shuffle依赖,Shuffle Dependency) Shuffle 依赖中,父 RDD 中的分区可能会被多个子 RDD 分区使用。因为父 RDD 中一个分区内的数据会被分割,发送给子 RDD 的所有分区,因此 Shuffle 依赖也意味着父 RDD 与子 RDD 之间存在着 Shuffle 过程。图2展示了几类常见的Shuffle依赖及其对应的转换操作。 图2 spark宽依赖 依赖关系是两个 RDD 之间的依赖,因此若一次转换操作中父 RDD 有多个,则可能会同时包含窄依赖和 Shuffle 依赖,下图所示的 Join 操作,RDD a 和 RDD c 采用了相同的分区器,两个 RDD 之间是窄依赖,Rdd b 的分区器与 RDD c 不同,因此它们之间是 Shuffle 依赖,具体实现可参见 CoGroupedRDD 类的 getDependencies 方法。这里能够再次发现:一个依赖对应的是两个 RDD,而不是一次转换操作。 图3 join操作包含两个依赖 一对一依赖 一对一依赖表示子 RDD 分区的编号与父 RDD 分区的编号完全一致的情况,若两个 RDD 之间存在着一对一依赖,则子 RDD 的分区个数、分区内记录的个数都将继承自父 RDD。 范围依赖 范围依赖是依赖关系中的一个特例,只被用于表示 UnionRDD 与父 RDD 之间的依赖关系。相比一对一依赖,除了第一个父 RDD,其他父 RDD 和子 RDD 的分区编号不再一致,Apache Spark 统一将unionRDD 与父 RDD 之间(包含第一个 RDD)的关系都叫做范围依赖。 3依赖与容错机制 介绍完依赖的类别和实现之后,回过头来,从分区的角度继续探究 Apache Spark 是如何通过依赖关系来实现容错机制的。下图给出了一张依赖关系图,fileRDD 经历了 map、reduce 以及filter 三次转换操作,得到了最终的 RDD,其中,map、filter 操作对应的依赖为窄依赖,reduce 操作对应的是 Shuffle 依赖。 图3 RDD转化过程 假设最终 RDD 第一块分区内的数据因为某些原因丢失了,由于 RDD 内的每一个分区都会记录其对应的父

您可能关注的文档

文档评论(0)

1亿VIP精品文档

相关文档