Spark中的基本概念
RDD
Resilient Distributed Dataset
, 弹性分布式数据集, Spark中基本的数据类型,还有DataFrame
以及 DataSet
三者的关系:
- RDD
: 最基本的数据类型, 类比于数据库中列的概念, 即单个字段的一列数据DataFrame
和 Dataset
也是基于 RDD 提供的
- DataFrame
: DataFrame[Row]
, 分布式的Row
的集合, 类比于数据库中的一张表, 有很多行数据(Row), 每一行的数据又有许多不同字段的值
- DataSet
: 相当于DataFrame
的一个特例, 特例在于DataSet
中存储的是强类型的数据, 不再是Row
算子
计算的类型, 分为Transformation
和Action
两种算子, 这就涉及到惰性运算的概念了, 参考Spark中的惰性运算
, 底层区别是执行Action
算子会调用 runJob()
方法
Transformation
算子主要包括:map、mapPartitions、flatMap、filter、union、groupByKey、repartition、cache等Action
算子主要包括:reduce、collect、show、count、foreach、saveAsTextFile等
注意: 如果声明了数据需要cache或者persist,但在action操作前释放掉的话,该数据实际上并没有被缓存
Job
用户提交的任务, 当在程序中遇到一个action
算子的时候,就会提交一个job
,执行前面的一系列操作
Stage
Job拆分的执行阶段, 一个 Job
可能被划分为一到多个 Stage
, Stage
的划分是根据shuffle
依赖进行的
Task
具体执行任务, Spark中最细的执行单位, Stage
继续往下分解就是Task
分为ShuffleMapTask
和 ResultTask
两种, 类比于 Hadoop
中的Map
和 Reduce
RDD
在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的的task数目。每个Task执行的结果就是生成了目标RDD的一个partiton。在Map阶段partition数目保持不变。在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,例如repartition操作会聚合成指定分区数。coalesce算子同样可以改变partition的数目,不过只能减少不能增加。repartition和coalesce算子的区别在于前者会引发shuffle,后者则不会
Partition
数据分区, 即一个RDD
的数据可以划分为多少个分区
NarrowDependcy
窄依赖, 分为 OneToOneDependency
和 RangeDependency
, 比如map、union等操作
ShuffleDependcy
shuffle
依赖, 也称为宽依赖, 比如groupByKey
等操作
DAG
有向无环图, 反映RDD
之间的依赖关系