对于一个要提交到大数据集群的spark任务而言,准确说这个任务应该叫一个application,因为application是分布式任务,因此需要分配到多台机器中运行,而为了方便每个application的自我管理,这个多台机器中会有一台机器被选为小组长来管理整个application,而这个小组长的名字就叫driver,其他干活的组员也叫executor;每个executor对应一个jvm进程,所有对数据的计算都在executor的内部进行,每个executor默认只分配一个CPU核心,因此在同一时刻就只能处理一个task,如果分配多个CPU核心则可以同时处理多个task。
粗略认为partition的数量就等同于task的数量,只不过partiton最初是由数据源的分布情况来确定,比如一个1G的HDFS数据源刚好占用了8个block,它对应的spark的partition数量就是8,每处理一个非空的partition就叫一个task。
对于任何一个application来说会存在若干个job,以及每个job中会存在若干个stage,而一个application有多少个job由代码中有多少个action算子来决定,最简单的application就只有一个action算子那么就只有一个job,而每个job中有多少个stage就看每一个job的处理逻辑中有多少次的shuffle操作,如果没有shuffle则只有一个stage,而如果有N个shuffle,那么就会有N+1个stage。
标签:task,partition,driver,application,job,executor,stage From: https://blog.csdn.net/2301_79551573/article/details/136922401