【Spark】之 RDD(Resilient Distributed Dataset) | 您所在的位置:网站首页 › sparksql三种join › 【Spark】之 RDD(Resilient Distributed Dataset) |
文章目录 RDD 编程模型一、RDD 之间的依赖关系(Dependency)如何生成RDD? 二、RDD计算(1)RDD 获得数据(2)RDD 计算任务(3)RDD 操作算子 三、RDD 容错(1)`Lineage`(2)`checkpoint` 机制 RDD 编程模型 需求:需要在多个并行操作之间 重用 工作数据集。 典型场景:机器学习和图应用中常用的迭代算法(每一步对数据执行相似的函数) 数据重用隐藏在系统实现背后,没有将重用逻辑显式地抽象出来形成通用接口。 RDD则是直接在编程接口层面提供了一种高度受限的共享内存模型。 RDD(弹性分布式数据集,Resilient Distributed Dataset),其本质是一种分布式的内存抽象,表示一个只读的数据分区(Partition)集合。 一、RDD 之间的依赖关系(Dependency) 如何生成RDD? 通过已有的文件系统构建而成通过其他RDD转换而成(map join 和 filter) 窄依赖 RDD之间分区是一一对应的窄依赖中的所有操作可以通过类似管道(Pipeline)的方式全部执行,宽依赖意味着数据需要在不同节点之间的 Shuffle 传输 宽依赖 下游RDD的每个分区与上游RDD(也称之为父RDD)的每个分区都有关,是多对多的关系。 二、RDD计算 (1)RDD 获得数据RDD计算的时候会通过一个 compute 函数得到每个分区的数据. 若 RDD 是通过已有的文件系统构建的,则 compute 函数读取指定文件系统的数据 若 RDD 是通过其他 RDD 转换而来的, 则 compute 函数执行转换逻辑,将其他RDD的数据进行转换. (2)RDD 计算任务从稳定的物理存储(如分布式文件系统 HDFS)中加载记录, 记录被传入由一组确定性操作构成的 DAG(有向无环图), 然后写回稳定存储。 一个任务流可以描述为 DAG (3)RDD 操作算子在 Spark 中, RDD 可以创建为对象,通过对象上的各种方法调用来对 RDD 进行转换。 经过一系列的 transformation 逻辑之后,就可以调用 action 来触发 RDD 的最终计算。 transformation 用来将 RDD 进行转换,构建 RDD 的依赖关系 action 用来触发 RDD 的计算,得到 RDD 的相关计算结果或将 RDD 保存到文件系统中。 在 Spark 中,只有遇到 action, 才会真正地执行 RDD 的计算 Lazy Evqluation,惰性计算,这样在运行时可以通过管道的方式传输多个转换。 三、RDD 容错 (1)LineageLineage信息 存储 RDD 之间的关系 当 RDD 的某个分区数据计算失败或丢失时,可以通过 Lineage 信息重建 如果在应用程序中多次使用同一个 RDD ,则可以将这个 RDD 缓存起来。 (2)checkpoint 机制对于长时间迭代型应用来说,随着迭代的进行,RDD 与 RDD之间的 Lineage 信息会越来越长 一旦在后续迭代过程中出错,根据 非常长的Lineage,对性能有很大影响 checkpoint机制 将数据保存到持久化的存储中。 |
CopyRight 2018-2019 实验室设备网 版权所有 |