Spark中的基本概念

RDD

Resilient Distributed Dataset, 弹性分布式数据集, Spark中基本的数据类型,还有DataFrame 以及 DataSet


三者的关系:
- RDD: 最基本的数据类型, 类比于数据库中列的概念, 即单个字段的一列数据DataFrameDataset 也是基于 RDD 提供的
- DataFrame: DataFrame[Row], 分布式的Row的集合, 类比于数据库中的一张表, 有很多行数据(Row), 每一行的数据又有许多不同字段的值
- DataSet: 相当于DataFrame的一个特例, 特例在于DataSet中存储的是强类型的数据, 不再是Row

算子

计算的类型, 分为TransformationAction两种算子, 这就涉及到惰性运算的概念了, 参考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
分为ShuffleMapTaskResultTask两种, 类比于 Hadoop中的MapReduce


RDD在计算的时候,每个分区都会起一个task,所以rdd的分区数目决定了总的的task数目。每个Task执行的结果就是生成了目标RDD的一个partiton。在Map阶段partition数目保持不变。在Reduce阶段,RDD的聚合会触发shuffle操作,聚合后的RDD的partition数目跟具体操作有关,例如repartition操作会聚合成指定分区数。coalesce算子同样可以改变partition的数目,不过只能减少不能增加。repartition和coalesce算子的区别在于前者会引发shuffle,后者则不会

Partition

数据分区, 即一个RDD的数据可以划分为多少个分区

NarrowDependcy

窄依赖, 分为 OneToOneDependencyRangeDependency, 比如map、union等操作

ShuffleDependcy

shuffle依赖, 也称为宽依赖, 比如groupByKey等操作

DAG

有向无环图, 反映RDD之间的依赖关系