Apache Spark 中的任务划分(Task Scheduling)是一个关键的优化过程,它影响到整个Spark作业执行的效率和性能。以下是Spark中任务划分的基本概念:
-
Application (应用程序)
- 当启动一个Spark应用程序时,会初始化一个
SparkContext
,这标志着一个新的Spark应用实例的开始。
- 当启动一个Spark应用程序时,会初始化一个
-
Job (作业)
- 在Spark中,当用户调用一个Action操作(如
count()
、saveAsTextFile()
等)时,会触发一次Job提交。每个Job代表一个完整的数据处理流程,从读取数据源开始直到最终生成结果。
- 在Spark中,当用户调用一个Action操作(如
-
Stage (阶段)
- Job被划分为一系列的Stage,每个Stage是由一组并行的、相互之间没有shuffle依赖关系的任务组成的。Stage的划分主要基于RDD之间的依赖关系:窄依赖可以在一个Stage内完成;而遇到宽依赖(比如
groupByKey
、reduceByKey
等操作)时,则会在该点划分新的Stage。
- Job被划分为一系列的Stage,每个Stage是由一组并行的、相互之间没有shuffle依赖关系的任务组成的。Stage的划分主要基于RDD之间的依赖关系:窄依赖可以在一个Stage内完成;而遇到宽依赖(比如
-
TaskSet (任务集)
- 每个Stage对应一个TaskSet,即一组并行的任务集合。Task的数量取决于Stage最后一个RDD分区的数量,以及是否涉及到shuffle阶段。
-
Task (任务)