一:RDD Objects
Spark执行代码块时会先构建DAG(有向无环图),描述了我们将要进行的操作
二:DAGScheduler
第二阶段为将一个DAG切分成多个stages,DAGScheduler切分的依据是Shuffle(宽依赖),在RDD执行过程中调用了很多算子,执行了很多RDD,并且还会调用Transformation,再执行很多的RDD。所以第二阶段会执行DAGScheduler切分stages装到TaskSet再发送给TaskScheduler,并且切分之后的stages他们的业务逻辑相同,只是数据不同而已
三:TaskScheduler
将上个阶段生成的多个Task调度到Worker的Executor中,意味着该Task要序列化,发送过去之后再反序列化,
四:Worker:
Executor接收Task,反序列化之后丢到线程池中执行

DAG:(有向无环图):数据执行过程,有方向,无闭环
描述多个RDD的转换关系,任务执行时,可以按照DAG的描述,执行真正的计算(数据被操作的一个过程)
DAG是有边界的:开始(通过SparkContext创建的RDD),结束(触发Action,调用 Run job 就是一个完整的DAG了)
一个Saprk Aoolication有多少个DAG:一到多个(触发一个Action就有一个DAG)
一个DAG可能产生多种不同类型和功能的Task,会有不同的阶段
一个RDD只是描述了任务执行过程中的一个环节,而DAG由一到多个RDD组成,描述了数据计算的所有环节(过程)
为什么要切分Stage?
一个复杂的业务逻辑(将多台机器上的具有相同属性的数据聚集到一台机器上:Shuffle)
如果有Shuffle,那么就意味着前面阶段产生结果后,才能执行下一个阶段(下一阶段的计算需要上个阶段的数据)
在同一个Stages中,会有多个算子,可以合并在一起,我们称其为pipeline(流水线:严格按照流程、顺序执行)


网友评论