1、Spark部署模式详解

在介绍部署模式之前,首先需要知道两个重要的角色:Driver(驱动器)、Executor(执行器)。

1、1Driver(驱动器)

Spark驱动器是执行开发程序中的main方法的进程。它负责开发人员编写的用来创建SparkContext、创建RDD、以及进行RDD的转化(transform)操作和行动(action)操作代码的执行。如果你是用的spark shell,当你启动spark shell的时候,系统后台自启一个Spark驱动器程序,就是在Spark shell中预加载的一个叫做SC的SparkContext对象(在分析源码的时候,关注SC能够帮助分许Driver的各个阶段)。如果驱动器程序终止,那么Spark应用也就结束了。

主要负责:

  • 将用户程序转化成job(负责job的分配和Submit)
  • 监控和调度Executor的运行
  • UI展示运行状况

1、2Executor(执行器)

Spark Executor是一个工作进程,负责在Spark作业中运行任务,任务间相互独立,负责Spark的算子执行。Spark应用启动时,Executor节点被同时启动,并且伴随着整个Spark应用的生命周期而存在,如果有Executor节点发生故障或崩溃,Spark应用也可以继续执行,会将出错节点上的任务调度到其他Executor节点上继续运行。

主要负责:

  • 运行Driver分配的任务,并把结果返回给Driver
  • 通过自身的块管理器(Block Manager)为用户程序中要求缓存的RDD提供内存式存储。RDD是直接缓存在Executor进程内的,因此任务可以在运行时充分利用缓存数据加速运算。

1、3Spark的三种部署模式

Spark具有Local模型(本地单机模式)、Standalone模式(Spark自带的集群管理模式)、Yarn模式(使用Hadoop中的Yarn来实现集群资源管理)。

2、Local模式

      Local模式主要用于本地调试,在Local模式中,对于工作流程的描述采用的主要概念是Driver和Executor。具体工作流程如下图:

Spark部署模式详解

 

Driver和Executor完成了主要的任务。Driver负责任务的初始化、划分和调度;Executor负责执行具体的Spark算子。

3、Standalone模式

      Standalone模式主要是Spark自带的集群部署模式。在Standalone模式中,对于工作流程的描述采用的主要概念是Master和Worker。具体工作流程如下图:

Spark部署模式详解

 

Client相当于Driver,Master相当于Local模式中的资源管理者,Worker相当于Executor(这里依旧采用了Executor的概念,只不过是用Worker将Executor包装了)。

4、Yarn模式

      Yarn模式相比Standalone模式更加成熟可靠,可以直接在已有的集群中部署并使用集群资源。Spark on Yarn主要有如下优点:

  • Spark支持资源动态共享,运行于Yarn的框架都共享一个集中配置好的资源池。
  • 可以很方便的利用Yarn的资源调度特性来做分类·,隔离以及优先级控制负载,拥有更灵活的调度策略
  • Yarn可以自由地选择executor数量
  • Yarn是唯一支持Spark安全的集群管理器,使用Yarn,Spark可以运行于Kerberized Hadoop之上,在它们进程之间进行安全认证

Spark客户端直接连接Yarn,不需要额外构建Spark集群。有Yarn-Client和Yarn-Cluster两种模式,主要区别在于:Driver程序的运行节点。

  • Yarn-Client:Driver程序运行在客户端(指的是提交Spark应用程序的主机),适用于交互、调试,希望立即看到app的输出。
  • Yarn-Cluster:Driver程序运行在由RM(ResourceManager,由集群制定,不一定是本机)启动的AP(APPMaster)适用于生产环境。

对比本机和Standalone模式,有如下对应关系:

本机模式

Standalone模式

Yarn模式

资源管理者

Master

RM

 

Worker

NM

Driver

Client

AM

Executor

Executor

Container

为了更好的理解这两种模式的区别先了解下Yarn的Application Master概念,在Yarn中,每个application都有一个Application Master进程,它是Appliaction启动的第一个容器,它负责从ResourceManager中申请资源,分配资源,同时通知NodeManager来为Application启动container,Application Master避免了需要一个活动的client(driver)来维持,启动Applicatin的client可以随时退出,而由Yarn管理的进程继续在集群中运行。

相关文章: