Spark的架构按上面的设计,分为四层:
Spark Core
理解为Spark的核心引擎Master Node: 常驻Master守护进程,负责管理全部的Worker节点。
Worker Node:常驻Worker守护进程,负责与Master节点通信并管理executors。在Spark on Yarn
模式下就是NodeManager
节点
Application: Application是指用户编写的Spark应用程序,其中包括一个Driver功能的代码和分布在集群中多个节点上运行的Executor代码。
Spark运行架构由三个主要组件组成:Driver、Cluster Manager和Executor。
是spark应用程序的入口点,它负责解析用户的应用程序代码,并将任务Task划分成一系列的stage,以及在集群上为任务安排调度。Driver节点负责管理各个任务之间的依赖关系,并将它们转换成一个可执行的物理执行计划(DAG)
Spark中的Driver运行上述Application的main函数并创建SparkContext,创建SparkContext的目的是为了准备Spark应用程序的运行环境。在Spark中由SparkContext负责与ClusterManager
通信,进行资源申请、任务的分配和监控等,当Executor部分运行完毕后,Driver同时负责将SparkContext
关闭,通常用SparkContext
代表Driver。
Driver可以跑在Master Node也可以跑在Worker Node,上图中仅展示跑在了Master Node
负责在集群中为应用程序分配资源。常见有三种类型:
Standalone: Spark原生的资源管理,由Master负责资源的分配
Apache Mesos: 与hadoop MR兼容性良好的一种资源调度框架
Hadoop Yarn
: 主要是指Yarn中的Resource Manager
Executor都运行在自己的JVM进程中,并且为Spark应用程序分配了一定数量的内存和CPU资源。Executor在运行过程中负责接收和执行任务。
如果Executor节点发生了故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他的Executor节点上继续运行。
Executor有两个核心功能:
负责运行组成Spark应用的任务,并将结果返回给驱动器Driver进程。
它们通过自身的块管理(Block Manager)为用户程序中要求缓存的数据提供内存式存储。数据是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。
Spark的概念有很多,但只要形成体系,学习起来并不复杂