Job->Stage->Task
开发完一个应用以后,把这个应用提交到Spark集群,这个应用叫Application。这个应用里面开发了很多代码,这些代码里面凡是遇到一个action操作,就会产生一个job任务。
一个Application有一个或多个job任务。job任务被DAGScheduler划分为不同stage去执行,stage是一组Task任务。Task分别计算每个分区partition上的数据,Task数量=分区partition数量。
Spark如何划分Stage:
会从执行action的最后一个RDD开始向前推,首先为最后一个RDD创建一个stage,向前遇到某个RDD是宽依赖,再划分一个stage。如下图,从宽依赖处划分为2个stage。
原理的应用场景:
1.通过监控界面上每个stage及其内部task运行情况,找到对应的代码段做性能调优。
2.指定RDD的分区数参数,实际也调整了task的数量,在数据量较大时适当调整增加并行度。