Application
Spark的应用程序,包含一个Driver program和若干Executor
SparkContext
Spark应用程序的入口,负责调度各个运算资源,协调各个Worker Node的Executor
Driver Program
运行Application的main()函数并且创建SparkContext
Executor
为Application运行在Worker node上的一个进程,该进程负责运行Task,并且负责将数据存在内存或者磁盘上,每个Application都会申请各自的Executor来处理任务
Cluster Manager
在集群上获取资源的外部服务(例如Standalone,Mesos,Yarn)
Worker Node
集群中任何可以运行Application代码的节点,运行一个或者多个Executor进程
Task
运行在Executor上的工作单元
Job
SparkContext提交的具体Action操作,常和Action对应
Stage
每个Job会被拆分很多组task,每组任务被称为Stage,也称TaskSet
RDD
是Resilient distributed datasets的简称,中文为弹性分布式数据集,是Spark最核心的模块和类
DAGScheduler
根据Job构建基本Stage的DAG,并提交Stage给TaskScheduler
TaskScheduler
将TaskSet提交给Worker node集群运行并返回结果
Transformations
是Spark API的一种类型,Transformation返回值还是一个RDD,所有的Transformation采用的都是懒策略,如果只是将Transformation的提交时不会执行计算的
Action
是Spark API的一种类型,Action返回值不是一个RDD,而是一个scala集合,计算只有在Action被提交的时候计算才被触发
Spark Standalone模式的集群由Master与Worker节点组成,程序通过与Master节点交互申请资源,Worker节点启动Executor运行
Driver部分
Driver部分主要是对SparkContext进行配置、初始化以及关闭。初始化SparkContext是为了构建Spark应用程序的运行环境,在初始化SparkContext,要先导入一些Spark的类和隐式转换;在Executor部分运行完毕后,需要将SparkContext关闭。
Executor部分
Spark应用程序的Executor部分是对数据的处理,包含原生数据,RDD,以及共享变量
Mesos是Apache下的开源分布式资源管理框架。由于血缘关系,Spark官方推荐这种模式,很多公司也采用该模式。Spark On Mesos模式参考:
Spark on YARN模式Spark on YARN框架解析:
基于YARN的Spark作业首先由Spark客户端生成作业信息,提交给ResourceManager,ResourceManager在某一个NodeManager汇报时把AppMaster分配给该NodeManager;
该NodeManager启动Spark AppMaster,Spark AppMaster 启动后初始化作业,然后向ResourceManager申请资源;
申请到相应资源后,Spark AppMaster通过RPC让对应若干个NodeManager启动相应的 Spark Executor,Spark Executor向Spark AppMaster汇报完成相应的任务。
Spark客户端会通过Spark AppMaster获取作业运行状态。
Client模式在Spark on YARN/Mesos模式中,根据Spark Application的Driver是否在集群中运行,Spark on YARN/Mesos运行模式又可以分为Client模式和Cluster模式。
Cluster模式 Spark运行基本流程Spark集群由若干节点构成,而每个节点都是可以接受和发送消息的RPC服务端点(Endpoint),根据责任的不同可以分为三类端点:Client、Master、Worker,三端调用关系:
Client:Spark任务节点,负责发布、查询,以及终止任务的相关进程的统称,Client是运行时有效进程,如果任务处理完成,对应的进程结束
Master:Spark管理节点,负责Worker进程,协调调度Client发布的任务处理,Master节点可以为多个,有且仅有一个为Active状态,其他为Standby状态
Worker节点:Spark工作节点,负责具体任务的执行工作
基于三端模型,用户通过spark-submit提交或者运行spark-shell REPL,集群创建Driver,Driver加载Application,最后Application根据用户代码转化成RDD,RDD分解为Tasks,Executor执行Task等,整体交互蓝图如下: