最近学习了spark,现根据任务提交分析处理过程总结一下相关的主要模块和任务提交处理流程。
一些重要术语
- client,用户编写的spark任务提交程序
- master,spark主节点,负责任务和资源调度、节点管理,类似于Yarn的ResourceManager
- worker,spark工作节点,可以在上面启动Executor进程,类似于Yarn的NodeManager
- driver,worker上的一进程,负责任务内部的分解执行等,类似于Yarn的ApplicationMaster
- Application,用户在spark上构建的程序,包含了driver程序以及集群上的executors
- Job,包含很多task的并行计算,可以认为是Spark RDD 里面的action,每个action的计算会生成一个job。用户提交的Job会提交给DAGScheduler,Job会被分解成Stage和Task
- Stage,每一个 job 包含 n 个 stage,最后一个 stage 产生 result。一个Job会被拆分为多组Task,每组任务被称为一个Stage就像Map Stage, Reduce Stage。
Stage的划分在RDD的论文中有详细的介绍,简单的说是以shuffle和result这两种类型来划分。在Spark中有两类task,一类是shuffleMapTask,一类是resultTask,第一类task的输出是shuffle所需数据,第二类task的输出是result,stage的划分也以此为依据,shuffle之前的所有变换是一个stage,shuffle之后的操作是另一个stage