Spark核心概念图解
Spark运行架构图
重要概念
Client
客户端进程,负责提交作业
Application
提交一个作业就是一个Application,一个Application只有一个SparkContext
Master
(图中的Cluster Manager),就像Hadoop中有NameNode和DataNode一样,Spark有Master和Worker。Master是集群的领导者,负责管理集群的资源,接收Client提交的作业,以及向Worker发送命令。
Worker
(图中的Woker Node),集群中的Woker,执行Master发送的命令,来具体分配资源,并在这些资源中执行任务
Driver
一个Spark作业运行时会启动一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage,并调度Task到Executor上
Executor
真正执行作业的地方。Executor分布在集群的Worker上,每个Executor接收Driver命令来加载和运行Task,一个Executor可以执行一个到多个Task
SparkContext
是程序运行调度的核心,由高层调度器DAGScheduler划分程序的每个阶段,底层调度器TaskScheduler划分每个阶段的具体任务。SchedulerBankend管理整个集群中为正在运行的程序分配的计算资源Executor。
DAGScheduler
负责高层调度,划分Stage并生成程序运行的有向无环图
TaskScheduler
负责具体Stage内部的底层调度,具体Task的调度、容错等
Job
(正在执行的叫ActiveJob)是Top-level的工作单元,每个Action算子都会触发一次Job,一个Job可能包含一个或多个Stage
Stage
是用来计算中间结果的Tasksets。Tasksets中的Task逻辑对于同一RDD内的不同Partition都一样。Stage在Shuffle的地方产生,此时下一个Stage要用到上一个Stage的全部数据,所以要等上一个Stage全部执行完才能开始。Stage有两种:ShuffleMapStage和ResultStage,除了最后一个Stage是ResultStage外,其他的Stage都是ShuffleMapStage。ShuffleMapStage会产生中间结果,以文件的方式保存在集群里,Stage经常被不同的Job共享,前提是这些Job重用了同一个RDD
Task
任务执行的工作单位,每个Task会被发送到一个节点上,每个Task对应RDD的一个Partition
Taskset
划分的Stage会转换成一组相关联的任务集
RDD
(Resilient Distributed Dataset)弹性分布数据集。是不可变的、Lazy级别的、粗粒度的(数据集级别的而不是单个数据级别的)数据集合,包含一个或多个数据分片,即Partition
DAG
(Directed Acyclic Graph)有向无环图。Spark实现了DAG计算模型,DAG计算模型是指将一个计算任务按照计算规则分解为若干子任务,这些子任务之间根据逻辑关系构建成有向无环图
两种级别算子
Transformation和Action。Transformation算子会由DAGScheduler划分到pipeline中,是Lazy级别的不会触发任务的执行;Action算子会触发Job来执行pipeline中的运算