目录

  • ​​spark outline​​
  • ​​RDD 血缘依赖作用​​
  • ​​RDD依赖划分​​
  • ​​Spark Job 划分​​
  • ​​DAG有向无环图​​

spark outline

​​大纲目录​​

RDD 血缘依赖作用

  1. 可以高效的解决数据容错时
  2. 对划分任务时候起到重要作用

RDD依赖划分

spark rdd 血缘依赖分为2种:窄依赖和宽依赖

  • 窄依赖

​窄依赖,​​父RDD一个Partition(分区)中的数据最多被子RDD的一个Partition使用

spark 血缘 窄依赖 宽依赖 Spark job 划分 DAG有向无环图_有向无环图

  • 宽依赖

​宽依赖,​​​父RDD一个Partition(分区)中的数据可被子RDD的多个Partition使用,​​过程中会引起Shuffle​

spark 血缘 窄依赖 宽依赖 Spark job 划分 DAG有向无环图_数据_02

//查看mapRDD的血缘关系
println(mapRDD.toDebugString)
//查看mapRDD的依赖关系
println(mapRDD.dependencies)

Spark Job 划分

先看一下 Spark Job 划分流程图

spark 血缘 窄依赖 宽依赖 Spark job 划分 DAG有向无环图_有向无环图_03

Spark Job 划分公式

​一个Spark集群​​​可以同时运行多个Application, 这些Application是由集群管理器(cluster manager)来调度的,​​一个Application​​​可以并发的运行多个 job,job对应着代码中的行动算子,每执行一个行动算子,就会提交一个job,​​一个job​​​由多个stage组成,stage个数=宽依赖的个数+1,​​一个 stage​​ 由多个 task 组成,task个数=每一阶段最后一个RDD的分区数

spark 血缘 窄依赖 宽依赖 Spark job 划分 DAG有向无环图_有向无环图_04

DAG有向无环图

DAG(Directed Acyclic Graph)​​有向无环图​​,这里指RDD转换执行的过程

一个 Spark 程序可以有多个 DAG(有几个 Action/Job,就有几个 DAG)

一个 DAG 可以有多个 Stage(根据宽依赖/shuffle 进行划分)

一个 Stage 可以有多个 Task 并行执行(task 数=分区数)