1 运行架构
Spark框架的核心是一个计算引擎,采用标准的master-slave的结构,图中的Driver表示master,负责整个集群的作业任务调度,Executor则是slave,负责实际执行任务
2 核心组件
2.1 Driver
Spark驱动器节点,用于执行Spark任务中的main方法,负责实际代码的执行工作
简单理解就是Driver是驱使整个应用运行起来的程序
2.2 Executor
是工作节点中的JVM进程,负责具体任务,如果有Executor节点发生故障或者崩溃,会讲出错任务调度到其他节点执行
2.3 Master 与 Worker
Spark集群的独立部署环境中,自身实现了资源调度,即Master朱啊哟负责资源的调度和分配,并进行集群的监控,类似于Yarn环境中的RM,Worker一个Work运行与一台服务器上,类似于Yarn环境中的NM
2.4 ApplicationMaster
RM(资源)和Driver(计算)之间的解耦合靠的就是AplicationMaster
3 核心概念
3.1 Executor 与 Core
集群中运行在工作节点(Work)中的一个JVM进程,是整个集群中的专门用于计算的节点。
提交应用中,可以提供参数指定计算节点的个数,以及对应的资源。资源一般是指工作节点Executor的内存大小和使用的虚拟CPU核(Core)数目
相关的启动参数:
3.2 并行度
多个任务同时执行,分布在不同的计算节点计算,所以可以实现多任务并行执行,这里我们将整个集群并行执行任务的数量称之为并行度
3.3 有向无环图(DAG)
大数据计算引擎我们根据使用方式一般分为四类,一类是Hadoop所承载的MapRuduce,它将计算分为两个阶段,分别为Map和Reduce,需要拆分算法,多个Job串联。支持DAG的框架为第二代计算引擎,比如Tez和Oozie,第三代则为Spark,特点是Job内部的DAG支持,以及实时计算。
4 提交流程
Yarn环境下的提交流程:
Spark应用程序提交到Yarn环境中执行的时候,两种方式:Client和Cluster。主要区别在于:Driver程序的运行节点
4.1 Yarn Client模式
Client模式将用于监控和调度的Driver模块在客户端执行,而不是Yarn中,一般用于测试
* Driver在任务提交的本地机器运行
* Driver启动后和ResourceManager通讯申请启动ApplicationMaster
* ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,负责向RexourceManager申请Executor内存
* ResourceManager接到ApplicationMaster的资源申请后会分配container,然后ApplicationMaster在资源分配指定的NodeManager上启动Executor进程
* Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数
* 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行
4.2 Yarn Cluster 模式
将用于监控和调度的Driver模式启动在Yarn集群资源中执行,一般应用于实践生产环境
- 在YARN Cluster模式下,任务提交后会和ResourceManager通讯申请启动ApplicationMaster,
- 随后ResourceManager分配container,在合适的NodeManager上启动ApplicationMaster,此时的ApplicationMaster就是Driver。
- Driver启动后向ResourceManager申请Executor内存,ResourceManager接到ApplicationMaster的资源申请后会分配container,然后在合适的NodeManager上启动Executor进程
- Executor进程启动后会向Driver反向注册,Executor全部注册完成后Driver开始执行main函数,
- 之后执行到Action算子时,触发一个Job,并根据宽依赖开始划分stage,每个stage生成对应的TaskSet,之后将task分发到各个Executor上执行。