美文网首页
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