stone

Spark编程模型
Spark提供了三种主要的抽象对象,分别是RDD,广播变量(Broadcast Variables),累加器(Ac...
扫描右侧二维码阅读全文
20
2016/12

Spark编程模型

Spark提供了三种主要的抽象对象,分别是RDD,广播变量(Broadcast Variables),累加器(Accumulators)。几乎所有的任务都是围绕这些模型进行的。

RDD(Resilient Distributed Datasets)

RDD是一种容错的,并行的数据结构,本质上是一种只读的分区记录,一个RDD可以包含多的分区,分布在多个worker上。

综述

描述一个RDD,可以从下面几个方面进行描述:

1.分区

RDD中有一个分区记录列表,记录每一个分区的位置,分区是RDD中最小的操作单位。

2.函数

RDD的操作分为transformation和action两种,采用懒计算的方式处理,即无论执行多少次transformation都不会马上执行,只会记录下操作,直到遇到action。这样做的好处是Spark可以根据最后需要的结果进行高效的剪枝,同时也可以根据这个操作记录,进行故障恢复。

在RDD中会记录下对父RDD上执行的操作。

3.依赖

每一个RDD都会记录下对父RDD的依赖关系,源RDD没有依赖。

依赖关系可以分为下面两种:

(1) 窄依赖

窄依赖就是每一个父RDD只能对应一个子RDD,其本质是父RDD转换成子RDD不需要通过网络进行数据混合,其分区情况不会改变。这样的依赖关系可以采用流水线操作来进行优化,一般窄依赖都会放在一个Stage中,常见的窄依赖操作有map,filter,union等等。除此之外,窄依赖的错误恢复策略较为简单,只需从父RDD重新进行计算即可。

(2) 宽依赖

宽依赖是一个父RDD可以对应多个子RDD,这种操作一般伴随着对数据的混合,涉及进行数据的传输,其结果的分区结构也会改变。

4.优先位置

每一个分片的优先计算位置。

5.分区策略

描述数据分区和存放的策略,常见的分区策略就是HashParitioner。

创建

RDD的创建主要有两种方法,一是从已有的数据进行并行化处理,产生RDD,另一种就是从外部文件系统进行创建。用第二种方法需要保证文件能被所有的worker访问,这个文件系统可以是HDFS,FTP,Local等等。

广播变量

广播变量是一种只读的数据结构,和普通的变量不同的地方是,广播变量是缓存在每一个worker的cache上,而不是每一个task分发一份。这也很容易明白,广播变量可以用于一个较大的数据的分发,从而减少每一次分发Task的代价。

广播变量在广播后是不能改变的,保持了各个节点的一致性。

累加器

累加器有点像全局变量,可以实现一些简单的全局操作,但是这个变量只能通过+=进行操作,而且这种操作必须满足交换律和结合律

Last modification:September 7th, 2018 at 08:22 pm
If you think my article is useful to you, please feel free to appreciate

Leave a Comment