Spark 核心概念

Application:用户编写的Spark应用程序,包含驱动程序(Driver)和分布在集群中多个节点上运行的Executor代码,在执行过程中有一个或多个作业组成。

Driver:一个Spark作业运行时会启动一个Driver进程,也是作业的主进程,负责作业的解析、生成Stage,并调度Task到Executor上。Spark中的Driver即运行Application的main函数并且创建SparkContext,其中创建SparkContext的目的是为了准备Spark应用程序的运行环境。当Executor运行完毕后,Driver负责将SparkContext关系。 Cluster Manager:在集群上获取资源的外部服务,目前支持一下几种

Standalone:Spark原生的资源管理,由Master负责资源的管理。Hadoop Yarn:有Yarn中的ResourceManager负责资源的管理。Mesos:由Mesos中的Mesos Master负责资源的管理。

Master:Spark有Master和Worker。Master是集群的领导者,负责管理集群资源,接受Client提交的作业,以及向Worker发送命令。在Spark on Yarn模式中指得是NodeManager节点。

Worker:集群中的Worker,执行Master发送的指令,来具体分配资源,并在这些资源中执行任务。

Executor:真正执行作业的地方。Executor分布在集群中的Worker上,每个Executor接受Driver的命令来加载和运行Task,一个Executor可以执行一到多个Task。

SparkContext:是程序运行调度的核心,由高层调度器DAGScheduler划分程序的每个阶段,底层调度器TaskScheduler划分每个阶段的具体任务。SchedulerBackend管理整个集群,为正在运行的程序分配计算资源Executor。负责与ClusterManager通信,进行资源的申请、任务的分配和监控等。

DAGScheduler:负责高层调度,划分stage并生成程序运行的有向无环如。

TaskScheduler:负责具体stage内部的底层调度,具体task的调度、容错等。

Job:是Top-level的工作单位,每个Action算子都会触发一次Job,一个Job可能包含一个或多个Stage。

Stage:是用来计算中间结果的Tasksets。Tasksets中的Task逻辑对于同一个RDD内的不同partition都一样。Stage在Shuffle的地方产生,此时下一个Stage要用到上一个Stage的全部数据,所以要等到上一个Stage全部执行完才能开始。Stage有两种:ShuffleMapStage和ResultStage,除了最后一个Stage是ResultStage外,其他的Stage都是ShuffleMapStage。ShuffleStageMap会产生中间结果,以文件的方式保存在集群里,Stage经常被不同的Job共享,前提是这些Job重用了同一个RDD。

Task:任务执行的工作单元,每个Task会被发送到一个节点上,每个Task对应RDD的一个partition。

RDD:是不可变的、Lazy级别的、粗粒度(数据集级别而不是单个数据级别的)数据集合,包含了一个或多个数据分片,即partition。

算子:Spark程序中有两种级别的算子:Transformation和Action。Transformation算子会有DAGScheduler划分到pipeline中,是Lazy级别的,不会触发任务的执行。Action算子会触发Job来执行pipeline中的运算。