赞
踩
由于 Spark 的懒执行, 在驱动程序调用一个action之前, Spark 应用不会做任何事情,针对每个 action, Spark 调度器就创建一个执行图(execution graph)和启动一个 Spark job。每个 job 由多个stages 组成, 这些 stages 就是实现最终的 RDD 所需的数据转换的步骤. 一个宽依赖划分一个 stage,每个 stage 由多个 tasks 来组成, 这些 tasks 就表示每个并行计算, 并且会在多个执行器上执行。
Application应用
Job:
一个应用中,每碰到一个action,就会起一个job
一个应用可以有多个job
stage:
阶段.每碰到一个宽依赖就会在这个job内创建一个新的stage。(如果宽依赖的时候,用的分区器和当前一样,则不会起新的阶段)
一个job至少有一个阶段
stage划分是从后向前划分,执行一定是从前向后
task:
体现了执行数据分析的并行度
一个stage包含多个task
task是一个线程,执行代码的最小单位
线程的run方法内部会调用我们传递过去的那些匿名函数
Spark 的顶层调度层使用 RDD 的依赖为每个 job 创建一个由 stages 组成的 DAG(有向无环图). 在 Spark API 中, 这被称作 DAG 调度器(DAG Scheduler)。DAG 为每个 job 构建一个 stages 组成的图表, 从而确定运行每个 task 的位置, 然后传递这些信息给 TaskSheduler. TaskSheduler 负责在集群中运行任。
Jobs
Spark job 处于 Spark 执行层级结构中的最高层. 每个 Spark job 对应一个 action, 每个 action 被 Spark 应用中的驱动所程序调用。
Stages
一个 job 是由调用一个 action 来定义的. 一个 action 可能会包含一个或多个转换( transformation ), Spark 根据宽依赖把 job 分解成 stage.
Tasks
stage 由 tasks 组成. 在执行层级中, task 是最小的执行单位. 每一个 task 表现为一个本地计算.一个 stage 中的所有 tasks 会对不同的数据执行相同的代码.(程序代码一样, 只是作用在了不同的数据上)。一个 task 不能被多个执行器来执行, 但是, 每个执行器会动态的分配多个 slots 来执行 tasks, 并且在整个生命周期内会并行的运行多个 task. 每个 stage 的 task 的数量对应着分区的数量, 即每个 Partition 都被分配一个 Task 。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。