Spark 内核 (二) --------- Spark 部署模式


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 集群部署。

一、YARN 模式运行机制

1. YARN Cluster 模式

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

注意:SparkSubmit、ApplicationMaster 和 CoarseGrainedExecutorBackend 是独立的进程;Driver
是独立的线程;Executor 和 YarnClusterApplication 是对象。
在这里插入图片描述

2. YARN Client 模式

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

object ExecutorLauncher {
	def main(args: Array[String]): Unit = {
		ApplicationMaster.main(args)
	}
}

6)AM 向 RM 注册,申请资源;
7)获取资源后 AM 向 NM 发送指令:bin/java CoarseGrainedExecutorBackend
8)CoarseGrainedExecutorBackend 进程会接收消息,跟 Driver 通信,注册已经启动的Executor;然后启动计算对象 Executor 等待接收任务
9)Driver 分配任务并监控任务的执行;

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

在这里插入图片描述

二、Standalone 模式运行机制

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

  • Master(RM):是一个进程,主要负责资源的调度和分配,并进行集群的监控等职责;
  • Worker(NM):是一个进程,一个 Worker 运行在集群中的一台服务器上,主要负责两个职责,一个是用自己的内存存储 RDD 的某个或某些 partition;另一个是启动其他进程和线程( Executor ),对 RDD 上的 partition 进行并行的处理和计算。

1. Standalone Cluster 模式

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

2. Standalone Client 模式

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

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

在森林中麋了鹿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值