分享Spark2任务划分以及执行流程的操作

分享Spark2任务划分以及执行流程的操作

1、spark Application中可以由不同的action触发job,也就是说一个Application里可以有很多的job,每个job是由一个或者多个stage构成的,后面的stage依赖前面的stage,只有前面依赖的stage计算完成后面的stage才会计算;

2、stage划分的就是根据宽依赖如:reduceByKey、groupByKey等前后就需要划分为两个stage;

3、由action(如collect)导致了SparkContext.runJob的执行,最终导致了DAGScheduler中的submitJob的执行向自己发送JobSubmitted消息(解耦合),

分享Spark2任务划分以及执行流程的操作

当自己接收到JobSubmitted消息后出发handleJobSubmitted方法的执行,在其方法中会创建finalStage;

分享Spark2任务划分以及执行流程的操作

利用createResultStage方法找到parents

分享Spark2任务划分以及执行流程的操作

在寻找parents(List<Stage>)的过程中采用广度优先的算法。

当Executor接收到任务后会通过线程池复用的方式执行任务。

当executor执行到runTask时会有ShuffleMapTask和ResultTask,我们以ShuffleMapTask为例看看最后是怎样执行到RDD的compute方法的。

分享Spark2任务划分以及执行流程的操作

会执行rdd.iterator

分享Spark2任务划分以及执行流程的操作

如果存储基本不是NONE就执行getOrCompute

分享Spark2任务划分以及执行流程的操作

好了,今天的知识就分享到这里,欢迎关注爱编程的南风,私信关键词:大数据 ,获取更多学习大数据的资源,如果文章对你有有帮助,请收藏关注,在今后与你分享更多学习大数据的文章。同时欢迎在下面评论区留言如何学习大数据。

src

相关推荐