Spark
运行架构及流程
Spark
运行架构
架构图
基本概念
Application
:用户编写的Spark
应用程序,一个main
方法。Driver
:程序中执行main
方法的进程,创建SparkContext
为Spark
应用程序提供运行环境,负责与ClusterManager
的通信,进行资源申请、任务的分配和监控等,当Executor
部分运行完毕后,Driver
同时负责将SparkContext
关闭。Executor
:是运行在工作节点(WorkerNode)
的一个进程,负责运行Task
。DAG
:有向无环图,反映RDD
之间的依赖关系。Task
:运行在Executor
上的工作单元。Job
:一个Job
包含多个RDD
,一般一个action
为一个job
Stage
:是Job
的基本调度单位,一个Job
会分为多组Task
,每组Task
被称为Stage
,或者也被称为TaskSet
,代表一组关联的,相互之间没有Shuffle
依赖关系的任务组成的任务集。
关系解释
一个Application由一个Driver和若干个Job构成
一个Action为一个Job
一个Job由多个Stage构成
一个Job由是否有宽依赖分为多个Stage
一个Stage由多个没有Shuffle关系的Task组成
一个Task根据RDD分区并行运行在多个分区上
Executor
有两个优点:
-
利用多线程来执行具体的任务减少任务的启动开销;
-
Executor
中有一个BlockManager
存储模块,会将内存和磁盘共同作为存储设备,有效减少IO
开销;
Spark
运行流程
流程图
1、用户通过spark-submit脚本提交应用
2、spark-submit脚本启动驱动器程序,调用用户定义的main方法
3、驱动器程序与集群管理器通信,申请资源启动执行器节点
4、集群管理器为驱动器程序启动执行器节点
5、驱动器进程执行用户应用中的操作,根据程序中定义的对RDD的转化操作和行动操作、驱动器节点把工作以任务形式发送到执行器节点。
6、任务在执行器程序中进行计算并保存结果
7、如果程序的main方法退出或者调用了SparkContext.stop(),驱动器程序会终止执行器进程,并且通过集群管理器释放资源。