1、RDD
-
官方解释是:A Resilient Distributed Dataset (RDD), the basic abstraction in Spark. Represents an immutable,partitioned collection of elements that can be operated on in parallel
-
译文:弹性分布式数据集(rdd)是Spark中的基本抽象。表示可以并行操作的、不可变的、分区的元素集合
从上截图可看出,RDD除了提供基础的map、filter等方法以外,还隐式整合了其他操作,
- 针对K-V类型的操作封装在org.apache.spark.rdd.PairRDDFunctions 下,例如:combineByKey、reduceByKey等
- 针对Double数值类型的操作封装在org.apache.spark.rdd.DoubleRDDFunctions 下,例如:sum等
- 针对SequenceFile文件类型的操作封装在org.apache.spark.rdd.SequenceFileRDDFunctions下,例如:saveAsSequenceFile等
2、RDD的特性
- a list of partitions :由一个或多个分区组成的列表
- a function for computing each split : 一个函数计算每一个分片,RDD的每个partition上面都会有function
- a list of dependencies on other RDDs:RDD会记录它的依赖 ,依赖还具体分为宽依赖和窄依赖,用于容错
- a Partitioner for Key-value RDDs:如果RDD里面存的数据是key-value形式,则可以传递一个自定义的Partitioner进行重新分区
- a list of preferred locations to compute each split on:去最优的位置计算,计算向数据移动
- 从以上五个特性可以总结的特点:
- 不可变的,已分区的集合对象
- 可以通过并行转换方式来创建,如:map、filter
- 失败自动重建
- 可控制存储级别(内存,磁盘等)用于容错重算
- 必须是可序列化
- 静态类型
3、宽窄依赖
-
窄依赖(NarrowDependency)
- 官方解释为:Base class for dependencies where each partition of the child RDD depends on a small number of partitions of the parent RDD. Narrow dependencies allow for pipelined execution
- 译文:依赖项的基类,其中子RDD的每个分区依赖于父RDD的少量分区。狭窄的依赖关系允许管道执行
- 其中窄依赖相同包下存在两个具体实现的子类,OneToOneDependency和RangeDependency
-
宽依赖(ShuffleDependency)
- 官方解释为:Represents a dependency on the output of a shuffle stage. Note that in the case of shuffle, the RDD is transient since we don’t need it on the executor side
- 译文:表示对洗牌阶段输出的依赖关系。注意,在shuffle的情况下,rdd是短暂的,因为我们不需要它在执行者端
- 总结:
- spark中的依赖是由org.apache.spark.Dependency来进行控制的,其下存在两个子类分别对应着窄依赖【NarrowDependency】和宽依赖【ShuffleDependency】
- NarrowDependency是一个抽象类,具体实现类是OneToOneDependency和RangeDependency
- OneToOneDependency:依赖的父RDD分区只有一个
- RangeDependency:依赖的父RDD分区有多个
- ShuffleDependency就是其他各类文章所说的宽依赖,笔者推荐介绍spark依赖关系的时候,将宽依赖改称为ShuffleDependency更为准确
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END