Spark-stage、task发送、资源任务调度、算子
spark中job/stage/RDD/partition/task之间的对应关系
Tips:
``一个applicition中有多个job job数量由Action算子决定 job间顺序执行
``一个job对应多个stage stage数量由宽依赖个数决定 stage间顺序执行
``一个stage有多个RDD
``一个RDD有多个partition(计算空间内最小单元/RDD的最小单元)
RDD是由分布在各个节点上的partition组成的
同一份数据(RDD)的partition 大小不一,数量不定
``一个stage有多个可并行的task(数据逻辑处理)
``一个task对应一个partition
task在内存资源足够的情况下是并行的,当内存资源不足时是串行的
partition数默认是和block块数是一致,但是后期shuffle过程是可变的
partition由application里的算子和最初读入的数据分块数量决定
partition 是弹性分布式数据集RDD的最小单元
block位于存储空间、partition 位于计算空间,
block的大小是固定的、partition 大小是不固定的,
block是有冗余的、不会轻易丢失,partition(RDD)没有冗余设计、丢失之后重新计算得到
一、stage
1概念
任务层面:Application -> job -> stage -> tasks=partition(RDD最小处理单元)
资源层面:Master -> Worker -> Executor -> Threadpool
Spark任务会根据RDD之间的依赖关系,形成一个DAG有向无环图,DAG会提交给DAGScheduler,DAGScheduler会把DAG划分相互依赖的多个stage,划分stage的依据就是RDD之间的宽窄依赖。
遇到宽依赖就划分stage,每个stage包含一个或多个task任务。然后将这些task以taskSet的形式提交给TaskScheduler运行。
stage是由一组并行的task组成。
2切割规则
切割规则:从后往前,遇到宽依赖就切割stage。
3-1计算模式-Pipeline管道模式
以wordCount为例: