MAPREDUCE服务 MRS-Spark2x基本原理:Spark原理
Spark原理
Spark的应用运行架构如图2所示,运行流程如下所示:
- 应用程序(Application)是作为一个进程的集合运行在集群上的,由Driver进行协调。
- 在运行一个应用时,Driver会去连接集群管理器(Standalone、Mesos、YARN)申请运行Executor资源,并启动ExecutorBackend。然后由集群管理器在不同的应用之间调度资源。Driver同时会启动应用程序DAG调度、Stage划分、Task生成。
- 然后Spark会把应用的代码(传递给SparkContext的JAR或者Python定义的代码)发送到Executor上。
- 所有的Task执行完成后,用户的应用程序运行结束。
Spark采用Master和Worker的模式,如图3所示。用户在Spark客户端提交应用程序,调度器将Job分解为多个Task发送到各个Worker中执行,各个Worker将计算的结果上报给Driver(即Master),Driver聚合结果返回给客户端。
在此结构中,有几个说明点:
- 应用之间是独立的。
每个应用有自己的executor进程,Executor启动多个线程,并行地执行任务。无论是在调度方面,或者是executor方面。各个Driver独立调度自己的任务;不同的应用任务运行在不同的JVM上,即不同的Executor。
- 不同Spark应用之间是不共享数据的,除非把数据存储在外部的存储系统上(比如HDFS)。
- 因为Driver程序在集群上调度任务,所以Driver程序需要和worker节点比较近,比如在一个相同的局部网络内。
Spark on YARN有两种部署模式:
- YARN-Cluster模式下,Spark的Driver会运行在YARN集群内的ApplicationMaster进程中,ApplicationMaster已经启动之后,提交任务的客户端退出也不会影响任务的运行。
- YRAN-Client模式下,Driver启动在客户端进程内,ApplicationMaster进程只用来向YARN集群申请资源。