Spark内核之部署模式

 

目录

 一、YARN模式运行机制

1.1  YARN Cluster模式

1.2 YARN Client模式

二、Standalone模式运行机制

2.1 Standalone Cluster模式

2.2 Standalone Client模式


Spark支持多种集群管理器(Cluster Manager),分别为:

Standalone:独立模式,Spark原生的简单集群管理器,自带完整的服务,可单独部署到一个集群中,无需依赖任何其他资源管理系统,使用Standalone可以很方便地搭建一个集群;

Hadoop YARN:统一的资源管理机制,在上面可以运行多套计算框架,如MR、Storm等。根据Driver在集群中的位置不同,分为yarn client(集群外)和yarn cluster(集群内部)

Apache Mesos:一个强大的分布式资源管理框架,它允许多种不同的框架部署在其上,包括Yarn。

K8S : 容器式部署环境。
实际上,除了上述这些通用的集群管理器外,Spark内部也提供了方便用户测试和学习的本地集群部署模式和Windows环境。由于在实际工厂环境下使用的绝大多数的集群管理器是Hadoop YARN,因此我们关注的重点是Hadoop YARN模式下的Spark集群部署。

表  Spark运行模式配置

Master URL

Meaning

local

在本地运行,只有一个工作进程,无并行计算能力。

local[K]

在本地运行,有 K 个工作进程,通常设置 K 为机器的

CPU 核心数量。

local[*]

在本地运行,工作进程数量等于机器的 CPU 核心数量。

spark://HOST:PORT

以 Standalone 模式运行,这是 Spark 自身提供的集群运行模式,默认端口号: 7077。详细文档见:Spark standalone

cluster。

mesos://HOST:PORT

在 Mesos 集群上运行,Driver 进程和 Worker 进程运行在 Mesos 集群上,部署模式必须使用固定值:--deploy-mode

cluster。详细文档见:MesosClusterDispatcher.

yarn-client

在 Yarn 集群上运行,Driver 进程在本地, Work 进程在 Yarn 集群上, 部署模式必须使用固定值:--deploy-mode

client。Yarn  集群地址必须在

HADOOP_CONF_DIRorYARN_CONF_DIR  变量里定义。

yarn-cluster

在 Yarn 集群上运行,Driver 进程在 Yarn 集群上,Work 进程也在 Yarn 集群上,部署模式必须使用固定

值:--deploy-mode cluster。Yarn 集群地址必须在

HADOOP_CONF_DIRorYARN_CONF_DIR  变量里定义。

 一、YARN模式运行机制

1.1  YARN Cluster模式

执行脚本提交任务,实际是启动一个SparkSubmit的JVM进程;
SparkSubmit类中的main方法反射调用YarnClusterApplication的main方法;
YarnClusterApplication创建Yarn客户端,然后向Yarn服务器发送执行指令:bin/java ApplicationMaster;
Yarn框架收到指令后会在指定的NM中启动ApplicationMaster;
ApplicationMaster启动Driver线程,执行用户的作业;
AM向RM注册,申请资源;
获取资源后AM向NM发送指令:bin/java YarnCoarseGrainedExecutorBackend;
CoarseGrainedExecutorBackend进程会接收消息,跟Driver通信,注册已经启动的Executor;然后启动计算对象Executor等待接收任务
Driver线程继续执行完成作业的调度和任务的执行。
Driver分配任务并监控任务的执行。

注意:
SparkSubmit、ApplicationMaster和CoarseGrainedExecutorBackend是独立的进程;
Driver是独立的线程;
Executor和YarnClusterApplication是对象。

Spark内核之部署模式_第1张图片

Spark内核之部署模式_第2张图片

1.2 YARN Client模式

执行脚本提交任务,实际是启动一个SparkSubmit的JVM进程;
SparkSubmit类中的main方法反射调用用户代码的main方法;
启动Driver线程,执行用户的作业,并创建ScheduleBackend;
YarnClientSchedulerBackend向RM发送指令:bin/java ExecutorLauncher;
Yarn框架收到指令后会在指定的NM中启动ExecutorLauncher(实际上还是调用ApplicationMaster的main方法);

object ExecutorLauncher {
  def main(args: Array[String]): Unit = {
    ApplicationMaster.main(args)
  }
}
AM向RM注册,申请资源;
获取资源后AM向NM发送指令:bin/java CoarseGrainedExecutorBackend;
CoarseGrainedExecutorBackend进程会接收消息,跟Driver通信,注册已经启动的Executor;然后启动计算对象Executor等待接收任务
Driver分配任务并监控任务的执行。

注意:
SparkSubmit、ApplicationMaster和YarnCoarseGrainedExecutorBackend是独立的进程;
Executor和Driver是对象。

Spark内核之部署模式_第3张图片

 Spark内核之部署模式_第4张图片

二、Standalone模式运行机制

Standalone集群有4个重要组成部分,分别是:

Master(RM):是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责;
Worker(NM):是一个进程,一个Worker运行在集群中的一台服务器上,主要负责两个职责,一个是用自己的内存存储RDD的某个或某些partition;另一个是启动其他进程和线程(Executor),对RDD上的partition进行并行的处理和计算
Driver:是一个进程,我们编写的 Spark 应用程序就运行在 Driver 上,由Driver 进程执行;
Executor:是一个进程,一个 Worker 上可以运行多个 Executor,Executor通过启动多个线程(task)来执行对 RDD 的 partition 进行并行计算,也就是执行我们对 RDD 定义的例如 map、flatMap、reduce 等算子操作。

2.1 Standalone Cluster模式

Spark内核之部署模式_第5张图片

 下面这个图有点详细,但看起来比较费力(❤ ω ❤)

Spark内核之部署模式_第6张图片

Standalone Cluster模式下,任务提交后,Master会找到一个Worker启动DriverDriver启动后向Master注册应用程序,Master根据submit脚本的资源需求找到内部资源至少可以启动一个Executor的所有Worker,然后在这些Worker之间分配Executor,Worker上的Executor启动后会向Driver反向注册,所有的Executor注册完成后,Driver开始执行main函数,之后执行到Action算子时,开始划分Stage,每个Stage生成对应的taskSet,之后将Task分发到各个Executor上执行。

2.2 Standalone Client模式

Spark内核之部署模式_第7张图片

Standalone Client模式下,Driver在任务提交的本地机器上运行。Driver启动后向Master注册应用程序,Master根据submit脚本的资源需求找到内部资源至少可以启动一个Executor的所有Worker,然后在这些Worker之间分配Executor,Worker上的Executor启动后会向Driver反向注册,所有的Executor注册完成后,Driver开始执行main函数,之后执行到Action算子时,开始划分Stage,每个Stage生成对应的TaskSet,之后将Task分发到各个Executor上执行。

 

你可能感兴趣的:(Spark,spark,部署模式,Yarn模式,Standalone模式)