美文网首页
Spark之旅 (二)RDD 简介

Spark之旅 (二)RDD 简介

作者: 44d18503659e | 来源:发表于2019-04-24 13:40 被阅读0次

一、RDD核心

RDD全称叫做弹性分布式数据集(Resilient Distributed Datasets)

RDD是一种分布式的内存抽象,表示一个只读的记录分区的集合

RDD是Spark的核心,我们编写的Spark程序本质上是对RDD进行各种转换操作

注:

只读:RDD只能通过其他RDD转换而创建,所以RDD直接存在依赖,可以认为是RDD的血缘关系

分区:RDD逻辑上是分区的,各个分区可以保持到不同的节点,从而可以进行并行计算

转换:RDD之间可以通过丰富的算子进行转换,这些RDD之间维护这种依赖关系

二、RDD操作

RDD支持两种类型的操作:Transformation(变换)和Action(行动)

变换:变换的返回值是一个新的RDD集合,而不是单个值。

如:map, filter, flatMap, groupByKey, reduceByKey

行动:行动操作计算并返回一个新的值

如reduce, collect, count, first, take

注:当执行一次行动(Action)时可以划分一次job

RDD操作:

1

word count计算时的RDD:

2

三、依赖关系

窄依赖:父子RDD之间的分区是意义对应的。

窄依赖中的转换操作与RDD中其他分区无关,可以通过类似管道的方式一气呵成完成执行。

宽依赖:子RDD的每个分区与父RDD的所有分区都有关系,是多对多的关系。

宽依赖的转换操作涉及到RDD不同的分区,需要数据的重新整理(Shuffle),产生数据交互。

备注:

stage的划分就是由依赖关系决定的,源站是遇窄依赖不变,遇到宽依赖则进行划分。使窄依赖尽量多的在一起。

例如word count:

3

Stage划分:

4

四、RDD的特点:

1、只读

2、可分区

3、高容错

4、支持java

5、可缓存

6、可持久化磁盘

RDD的5大特点

1)A list of partitions

RDD由很多partition构成,在spark中,计算式,有多少partition就对应有多少个task来执行

2)A function for computing each split

对RDD做计算,相当于对RDD的每个split或partition做计算

3)A list of dependencies on other RDDs

RDD之间有依赖关系,可溯源

4)Optionally, a Partitioner for key-value RDDs (e.g. to say that the RDD is hash-partitioned)

如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区,比如可以按key的hash值分区

5)Optionally, a list of preferred locations to compute each split on (e.g. block locations for an HDFS file)

最优的位置去计算,也就是数据的本地性

计算每个split时,在split所在机器的本地上运行task是最好的,避免了数据的移动;split有多个副本,所以preferred location不止一个

数据在哪里,应优先把作业调度到数据所在机器上,减少数据的IO和网络传输,这样才能更好地减少作业运行时间(木桶原理:作业运行时间取决于运行最慢的task所需的时间),提高性能

相关文章

网友评论

      本文标题:Spark之旅 (二)RDD 简介

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