在spark的开发中,我们一般会开发对应的应用程序,这里我们一般把他称为是一个application或者job。一个应用程序里面包含自己当前应用程序所需要操作的所有逻辑。在应用程序开发完毕之后,我们需要把这个应用程序部署到spark的集群里面运行起来。
在spark应用程序被提交到spark集群中的时候,spark会将应用程序拆分为两大部分,分别是:
1、Spark driver 2、Spark Executors
这两个部分都是作为独立的jvm进程运行在spark集群上的。一个spark应用程序只会有1个Spark driver和多个Spark Executors。这里其实也可以看作是一个主从架构,Spark driver作为主,负责管理所有应用程序的执行信息,Spark Executors作为从,负责执行对应的应用程序。下面我们详细的介绍下Spark Driver和Spark Executors信息。
Spark Driver
Spark Driver主要是用于运行spark应用程序的main()函数,并且创建SparkSession的进程。它是Spark应用程序的主控制器,负责组织和监控一个Spark应用程序的执行。当一个spark应用程序被提交的时候,整个SparkDriver的运行流程如下:
1、向集群管理器请求内存和cpu资源。 2、将应用程序逻辑分解为阶段(stage)和任务(task) 3、请求集群管理器启动名为Executor的进行(运行在worker节点上) 4、向Executor发送Task的信息(应用程序数据处理逻辑),每一个Task都在一个单独的CPU上执行 5、与每一个Executor协调,收集所有的计算结果,并且将结果进行合并。
在Spark Driver里面还有很多的组件,下面分别介绍下各组件的主要功能:
1)SparkContext
SparkContext主要的功能使连接到Spark集群上,可用于在集群上创建RDD、累加器或者其他广播变量等操作。
2)DAGScheduler
DAGScheduler计算每个作业的stages的DAG,并将他们提交给TaskScheduler,确定任务的首选位置,并找到运行作业的最优调度。
3)TaskScheduler
TaskScheduler负责将任务(Tasks)发送到集群,运行他们,在出现故障时重试,并减少掉队的情况。
4)SchedulerBackend
SchedulerBackend用于调度系统的后端接口,允许插入不同的实现(Mesos,YARN,单机、本地等)
5)BlockManager
BlockManager用于提供在本地或者远程将block块放入和检索到各种存储(内存,磁盘和非堆)中的接口
Spark Executor
Executor在每一个spark应用程序中会有多个,每一个Executor都在一个独立的jvm进程中,盟主要用来执行命令,以任务的形式执行数据处理逻辑。
Executor全部运行在spark集群的worker工作节点上
最后再来一张标识spark应用程序执行的图示
还没有评论,来说两句吧...