Spark2.x学习笔记:4、Spark程序架构与运行模式

时间:2022-12-27 11:53:26

4、 Spark程序架构与运行模式

4.1 Spark程序最简架构

所有的Spark程序运行时,主要由两大类组件Driver和Excutor构成。

  • 每个Spark程序运行时都有一个Driver,Driver是进程包含了运行所需要的CPU和内存等资源,Driver是我们应用程序main函数所在进程。比如当我们运行一个spark-shell时,就创建了一个driver 程序 。
  • Executor可以有多个,其职责是运行给定的Spark 作业中的单个任务。Driver 必须协调各独立任务到executor 中,也就是由driver向集群申请资源,集群分配资源,启动executor。当excutor 启动后,它们会将自己注册到driver,所以driver 随时都能看到完整的executor视图。每个executor 表现为能执行任务和保存RDD 数据的进程。Executor 在Spark 应用开始的时候被启动一次,一般会在应用的整个生命周期都运行。Executor 有两个任务。一个是运行构成应用的任务并返回结果到driver。第二个是通过每个executor 中都存在的被称为块管理器(Block Manager)的服务为用户程序中缓存的RDD 提供内存存储。
  • Task 是Spark 处理中的最小单元。Task 在executor 进程运行来计算和保存结果。

Spark2.x学习笔记:4、Spark程序架构与运行模式

总结:Driver和Excutor都是进程,Task是Excutor进程下的线程。由driver向集群申请资源,集群分配资源,启动executor。driver将spark应用程序的代码和文件传送给executor。executor上运行task,运行完之后将结果返回给driver或者写入外界。

Spark运行模式可以分为三类:本地模式,独立模式,Spark on YARN/Mesos。

4.2 本地模式

前面2章的内容,Spark都是以本地模式运行。
在本地模式下,Spark应用程序以多线程形式直接在本地运行,方便程序调试。
本地模式有可以分为以下三种:

  • local:只启动一个executor
  • local[k]:启动k个executor
  • local[*]:启动和CPU数相同的executor

在前面的spark-shell中日志中,可以看到输出信息master = local[*],表示spark-shell是在本地模式下运行,默认启动和CPU数相同的个executor。

4.3 独立模式

独立模式(standalone)表示Spark运行在独立的集群中,无依赖任何其他资源管理系统。

Standalone模式需要将Spark复制到集群中的每个节点,然后分别启动每个节点即可;Spark Standalone模式的集群由Master与Worker节点组成,程序通过与Master节点交互申请资源,Worker节点启动Executor运行。

当Driver中的SparkContext初始化的时候会提交程序给Master,Master如果接受该程序在Spark中运行的话,就会为当前的程序分配AppID,同时会分配具体的计算资源,需要特别注意的是,Master是根据当前程序提交的配置信息来给集群中的Worker发指令分配具体的计算资源,但是,Master发出指令后并不关心具体的资源是否已经分配,转来说Master是发指令后就记录了分配的资源,以后客户端再次提交其它的程序的话就不能使用该资源了。
Spark2.x学习笔记:4、Spark程序架构与运行模式

提示:大多博客介绍的《Spark完全分布式环境搭建》实际上就是Spark独立模式(standalone)。而Spark运行模式最常用的是Spark on YARN/Mesos。

4.4 Spark on YARN/Mesos

从架构和应用角度上看,spark是一个仅包含计算逻辑的开发库(尽管它提供个独立运行的master/slave服务,但考虑到稳定后以及与其他类型作业的继承性,通常不会被采用),而不包含任何资源管理和调度相关的实现,这使得spark可以灵活运行在目前比较主流的资源管理系统上,典型的代表是mesos和yarn,我们称之为“spark on mesos”和“spark on yarn”。将spark运行在资源管理系统上将带来非常多的收益,包括:与其他计算框架共享集群资源;资源按需分配,进而提高集群资源利用率等。
(1)Spark on Mesos模式
Mesos是Apache下的开源分布式资源管理框架。由于血缘关系,Spark官方推荐这种模式,很多公司也采用该模式。Spark On Mesos模式参考:http://dongxicheng.org/apache-mesos/meso-architecture/
(2)Spark on YARN模式
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获取作业运行状态。

(3)Client模式
在Spark on YARN/Mesos模式中,根据Spark Application的Driver是否在集群中运行,Spark on YARN/Mesos运行模式又可以分为Client模式和Cluster模式。

Spark2.x学习笔记:4、Spark程序架构与运行模式
(4)Cluster模式
Spark2.x学习笔记:4、Spark程序架构与运行模式