Spark的架构与基本运行流程

  • 一、Spark中的核心概念
  • 二、Spark中的核心架构设计
  • 三、Spark中的基本运行流程

一、Spark中的核心概念

(1)RDD,Spark中最核心的概念就是RDD(Resillient Distributed Dataset,弹性分布式数据集)。换而言之,整个RDD就是Spark中的最核心数据抽象。相较于关系型数据库,在Spark中主要是对RDD进行一次又一次的操作。

RDD是分布式内存的一个抽象概念,提供了一种高度受限的共享内存模型。即RDD一旦生成后,是不允许去修改的,它是只读的,所以它受限。

(2)DAG,是Directed Acyclic Graph(有向无环图)的简称,反映了RDD之间的依赖关系。

我们在对Spark进行编程时,就是将数据加载到内存生成RDD,然后对RDD进行一次又一次的操作,最终得到结果。而对RDD间的一次又一次操作就构成了DAG,因此DAG就反映了RDD之间的依赖关系。

(3)Executor,是运行在工作节点(WorkerNode)上的一个进程,负责运行任务。一个Executor进程会派生出很多线程,每个线程会具体负责每一个任务,如下图所示。

(4)Application,是用户编写的Spark应用程序。

(5)Task,任务,是运行在Executor上的工作单元。

(6)Job,作业,一个作业包含多个RDD,以及相应RDD上的各项操作。

(7)Stage,阶段,是Job的基本调度单位,一个Job会分为多组Task,每组Task被称为Stage,或者也被称为TaskSet,代表一组关联的、相互之间没有Shuffle依赖关系的任务组成的任务集。


二、Spark中的核心架构设计

这个Spark的运行架构如下图所示。


一张图讲的很清楚了。一个应用被提交后,将会被生成很多个作业(具体生成多少个作业,则取决于里面的相关代码)。每一个作业又会被切分为多个阶段


执行结束后,Spark会将结果返回给Driver节点,返回给用户;或者写入HDFS或其他数据库,相应的过程如以下2张图所示。


SparkContext就好比“指挥所(Driver)”里面的“指挥官”。

三、Spark中的基本运行流程

DAG的处理过程:

得到DAG图之后,会提交给DAG Scheduler去进行解析,负责将这张完整的DAG图切成很多不同的阶段,每个阶段都包含若干个任务。

每个阶段都是一个任务的集合,然后提交给Task Scheduler,它主要负责将任务纷发到哪个节点上去。这里需要注意的是,并不是Task Scheduler自己去完成纷发,而是运行在每个工作节点(Worker Node)上的Executor会主动地向Task Scheduler去申请运行任务,Task Scheduler会根据申请情况将相应的任务纷发到Executor上,让Executor进程派送线程去执行。

多个Executor来申请,到底给谁呢?即计算(代码)如何进行纷发? —— 计算向数据靠拢,即数据在哪个节点,我们将优先将计算仍向它所在的节点,完成本地化处理,如下图所示。

Executor的计算结果又会反馈给Task Scheduler,再由它向上传递给DAG Scheduler,最后由Spark Context对象做处理,或者返回给用户看,或者写入HDFS,如下图所示。

因此,Spark Context对象就代表了与底层集群的连接


​ 【彩蛋来了】

看完作者写的这篇博文,请参见:

  1. https://vault.centos.org/6.6/os/i386/repodata/repomd.xml: [Errno 14] problem making ssl connection

created in 2022.12.11,updated in 2022.12.08