《Spark大数据编程基础(Scala版)》第五章 RDD编程

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

5.1 RDD基础
RDD可以让用户将数据存储到磁盘和内存中,并能控制数 据的分区,且提供了丰富的API操作整个集群进行数据挖掘。 逻辑上认为RDD是一个不可变的分布式对象集合,而集合中的 每个元素可以是用户自定义的任意数据结构。RDD通过其依赖 关系形成Spark的调度顺序,然后通过RDD的操作形成整个 Spark程序。
5.1.2 依赖关系
窄依赖优于宽依赖主要基于两个原因:
其次,从数据恢复的角度考虑,窄依赖的数据恢复更有效, 只需要重新计算丢失的父分区,而且可以并行地在不同节 点上重新计算。而宽依赖涉及RDD各级的多个父分区,可 能导致计算冗余。
5.1.2 依赖关系
1.窄依赖
窄依赖是指父RDD的每 个分区最多只对应子 RDD的一个分区,而子 RDD的每一个分区可以 依赖多个父RDD的分区 (与数据规模无关, O(1))。例如map, filter等操作。
5.1.1 RDD的基本特征
Spark一切操作都是基于RDD,RDD就是Spark输入的 数据。RDD有五个特征,其中分区、函数、依赖是三个 基本特征,分区策略和优先位置是两个可选特征。
5.1.1 RDD的基本特征
(1)分区(partitions)
将RDD划分成多个分区(partitions)分布到集群的节 点上,分区的多少涉及到对RDD进行并行计算的粒度, 每一个分区的数据能够进行并行计算,RDD的并行度默 认从父RDD传给子RDD。RDD本质上是逻辑分区记录的 集合,在集群中一个RDD可以包含多个分布在不同节点 上的分区,每个分区是一个dataset片段。
Spark大数据编程基础(Scala版)
第五章 RDD编程
弹性分布式数据集(Resilient Distributed Dataset, RDD)是Spark对数据的核心抽象。通过这种统一的编程 抽象,用户可以数据共享,并以一致的方式应对不同的 大数据处理场景,提高Spark编程的效率和通用性。
Spark大数据编程基础(Scala版)
5.1.1 RDD的基本特征
(1)分区(partitions)
在对RDD操作中,用户可以使用partitions.size方法获取 该RDD划分的分区数目,也可以通过手动设置分区数目。 1、方法一是在RDD调用textFile或者parallelize和makeRDD
方法时手动指定分区个数即可。 2、方法二是在通过转换操作得到新的RDD时,直接调用
5.1.1 RDD的基本特征
(4)分区策略
描述分区模式和数据存放的位置,键-值对(key-value) 的RDD根据哈希值进行分区,类似于MapReduce中的 Partitioner接口,根据key来决定分配位置。
5.1.1 RDD的基本特征
(5)优先位置
优先位置列表存储存取每个Partitioner的优先位置,对 于一个HDFS文件而言,这个列表就是每个Partition所在 的块的位置。依据大数据中数据不动代码动的原则, Spark本身在进行任务调度的时候会尽可能地将任务分配 到其所要处理数据块的存储位置。
5.1.2 依赖关系
Spark将依赖关系分为窄依赖(narrow dependency) 和宽依赖(wide dependency)。窄依赖和宽依赖的作用主 要体现在两方面:一是实现了RDD良好的容错性能;二是在 调度中构建DAG(有向无环图)作为不同Stage的划分。
5.1.2 依赖关系
窄依赖优于宽依赖主要基于两个Biblioteka Baidu因:
5.1.1 RDD的基本特征
(2)函数(compute)
每一个分区都有一个计算函数,Spark RDD的计算是以 分区为基本单位的,每个RDD都会实现compute函数以达 到这个目的。compute函数会对迭代器进行复合,不需要 保存每次计算的结果。
5.1.1 RDD的基本特征
(3)依赖(dependency)
repartition方法强制改变RDD的分区数量即可。
5.1.1 RDD的基本特征
语法格式为: ① sc.textFile(path,partitionNum) ② sc.parallelize(seq,partitionNum) ③ sc.makeRDD(seq,partitionNum) ④ sc.repartition(partitionNum)
首先,从数据混洗的角度考虑,窄依赖的RDD可以通过相 同的键进行联合分区,整个操作都可以在同一个集群节点 上以流水线(pipeline)形式执行。例如,执行了map操 作后,紧接着执行filter,不会造成网络之间的数据混洗。 相反,宽依赖的RDD会涉及数据混洗,需要所有的父分区 均为可用,可能还需要进行跨节点传递数据。
依赖具体分为宽依赖和窄依赖。由于RDD每次转换都 会生成新的RDD,窄依赖的RDD之间就会形成类似于流 水线(pipeline)一样的前后依赖关系,以流水线的方式 计算所有父分区,不会造成网络之间的数据混合。但宽 依赖不类似于流水线,它会涉及数据混合,首先计算好 所有父分区数据,然后在节点之间进行Shuffle(数据混 洗)。另外需要说明的是源RDD没有依赖。
5.1 RDD基础
RDD是Spark的重要组成部分,通过学习RDD,有利于理解 分布式计算的实质以及Spark计算框架的实现。弹性分布式数据 集(Resilient Distributed Dataset,RDD)是只读的记录分区的 集合,能横跨集群的所有节点进行并行计算,是一种基于工作 集的应用抽象。这个数据集的全部或者部分可以缓存在内存中, 在多次计算间重用,所谓弹性就是指在内存不够时可以与磁盘 进行交换。
本章首先介绍RDD基础、RDD依赖关系的说明以及 RDD的创建方法;然后介绍RDD的各种API操作包括 Transformation操作,Action操作,读写数据的格式以及 RDD的缓存和容错机制;最后结合两个综合实例来加深 对RDD编程的理解。
主要内容
5.1 RDD基础 5.2 创建RDD 5.3 RDD操作 5.4 数据的读取与保存 5.5 RDD缓存与容错机制 5.6 综合实例 5.7 本章小结
相关文档
最新文档