目录
10.3 Spark运行架构
10.3.1 基本概念
10.3.2 架构设计
编辑
10.3.3 Spark运行基本流程
Spark运行架构特点
10.3 Spark运行架构
10.3.1 基本概念
RDD
:是
Resillient
Distributed Dataset
(弹性分布式数据集)的简称,是分布式内存的一个抽象概念,
提供了一种高度受限的共享内存模型
DAG
:是
Directed Acyclic Graph
(有向无环图)的简称,反映
RDD
之间的依赖关系
Executor
:是运行在工作节点(
WorkerNode
)的一个进程,负责运行
Task
Application
:用户编写的
Spark
应用程序
Task
:运行在
Executor
上的工作单元
Job
:一个
Job
包含多个
RDD
及作用于相应
RDD
上的各种操作
Stage
:是
Job
的基本调度单位,一个
Job
会分为多组
Task
,每组
Task
被称为
Stage
,或者也被称为
TaskSet
,代表了一组关联的、相互之间没有
Shuffle
依赖关系的任务组成的任务
集
10.3.2 架构设计
Spark
运行架构包括集群资源管理器(
Cluster Manager
)、运行作业任务的工作
节点
(
Worker Node
)、每个应用的任务控制
节点
(
Driver
)和每个工作节点上负责具体任务的执行进程(
Executor
)
。其中,集群管理器
可以自带
或
使用
Mesos
、
YARN
等资源管理框架。
与Hadoop MapReduce计算框架相比,Spark所采用的Executor有两个优点:
Ø
一是利用多线程来执行具体的任务,减少任务的启动
开销。
Ø
二是
Executor
中有一个
BlockManager
存储模块,会将内存和磁盘共同作为存储设备,有效减少
IO
开销。
一个
Application
由一个
Driver
和若干个
Job
构成,一个
Job
由多个
Stage
构成,一个
Stage
由多个没有
Shuffle
关系的
Task
组成
。
当执行一个
Application
时,
Driver
会向集群管理器申请资源,启动
Executor
,并向
Executor
发送应用程序代码和文件,然后在
Executor
上执行
Task
,运行结束后,执行结果会返回给
Driver
,
或者写到
HDFS
或者其他数据库
中
。
10.3.3 Spark运行基本流程
(1)首先为应用构建起基本的运行环境,即由Driver创建一个SparkContext,进行资源的申请、任务的分配和监控
(2)资源管理器为Executor分配资源,并启动Executor进程
(3)SparkContext根据RDD的依赖关系构建DAG图,DAG图提交给DAGScheduler解析成Stage,然后把一个个TaskSet提交给底层调度器TaskScheduler处理;Executor向SparkContext申请Task,Task Scheduler将Task发放给Executor运行,并提供应用程序代码。
(4)Task在Executor上运行,把执行结果反馈给TaskScheduler,然后反馈给DAGScheduler,运行完毕后写入数据并释放所有资源
Spark运行架构特点
总体而言,Spark运行架构具有以下特点:
(1)每个Application都有自己专属的Executor进程,并且该进程在Application运行期间一直驻留。Executor进程以多线程的方式运行Task
(2)Spark运行过程与资源管理器无关,只要能够获取Executor进程并保持通信即可
(3)Task采用了数据本地性和推测执行等优化机制
数据本地
性,指的是尽量计算移动到数据所在的节点,即“计算向数据靠拢”,因为移动计算比移动数据比所占的网络资源要少的多。
Spark
还采用了延时调度机制,可以在更大程度上实现执行过程优化。比如数据节点当前正被其他的任务占用,那么在这种情况下是否需要将数据移动到其他的空闲节点上?不一定。