沉默的背影 X-Pacific

keep learning

spark调度原理描述

spark调度的几个概念

集群

一个spark集群可以同时运行多个spark应用

应用

1、main方法、spark-shell、spark-submit能够运行的spark程序

2、可以理解为创建SparkContext的driver运行的程序

3、一个spark应用可以运行多个job

job

job对应应用中的行动算子,每执行一个行动算子都会提交一个job

一个job由多个stage(阶段)组成

stage阶段

一个宽依赖做一次阶段的划分

宽依赖就是shuffle依赖,发生了shuffle的操作都是宽依赖

以下算子都会引发shuffle

**Bykey、repartition、groupBy、SortBy、join

阶段的个数 = 宽依赖的个数 + 1

 

一个stage由多个task组成

task任务

task是每个并行的计算过程,并运行于executor(这里需要注意和executor的关系)

task是真正处理数据的动作

spark调度流程示意图

 

 

如上图所示:

1、阶段1中,虽然有一次map算子的调用,并生成了新的RDD,但是并没有产生shuffle,所以在同一阶段

2、阶段1中有两个分区,所以会有两个task并行运行于executor

注意:task对应着线程,executor对应在集群实例节点上的进程,对比与hadoop中mapReduce中的maptask或reducetask(进程),task线程会轻很多,而executor是启动集群就创建好的,task运行在哪个executor中需要driver进行调度

每个task处理一个partition分区

3、阶段1没运行完,阶段2不可以开始

4、上图对应着一个DAG有向无环图,对应着一次行动算子的调用,一个job

5、当task被提交到executor之后,会根据executor可用的cpu核数,决定一个executor中最多同时运行多少个task

分布式计算的精髓

分布式计算的精髓在于,如何把抽象的计算流图,转化为实实在在的分布式计算任务,然后以并行计算的方式交付执行。

这也是spark最牛的地方:操作分布式的数据尽量感知不到是分布式的

posted @ 2022-03-21 17:32  乂墨EMO  阅读(74)  评论(0编辑  收藏  举报