通过spark-sumbit提交Standalone集群+Clientr部署模式下的程序的流程
spark-submit提交程序
- SparkSubmit相应提交程序请求
- 由于是standalone集群+部署模式(deployMode)是client的方式,因此逻辑执行到在SparkSubmit的main方法里通过反射构造应用的class的main函数
- 程序执行到程序的main函数中
- 创建SparkContext对象
1. 创建private[spark] var (schedulerBackend, taskScheduler) = SparkContext.createTaskScheduler(this, master)
2. 创建 dagScheduler = new DAGScheduler(this)
- 在createTaskScheduler方法中,创建SparkDeploySchedulerBackend对象,SparkDeploySchedulerBackend继承自SparkDeploySchedulerBackend
- 在SparkContext的构造方法中,调用TaskScheduler的start方法,在start方法内部调用SparkDeploySchedulerBackend的start方法
- 在SparkDeploySchedulerBackend的start方法中,构造AppClient对象,并调用AppClient的start方法
- 在AppClient中,执行preStart方法以调用registerWithMaster()方法,将Driver注册给Master。注册的动作实际上是AppClient给Master发送RegisterApplication消息,
- 在Master的RegisterApplication消息处理中,调用Master的schedule方法(注意资源调度策略)
- 在Master的schedule方法中调用launchExecutor方法
- 在Master的launchExecutor方法中,给Worker发送LaunchExecutor消息
- 在Workder的LaunchExecutor消息处理器中,创建ExecutorRunner对象,而ExecutorRunner则通过反射的方式创建一个Java进程,这个进程就是启动一个CoarseGrainedExecutorBackend进程
- CoarseGrainedExecutorBackend是一个Actor,首先运行它的preStart方法,在它的preStart方法中,给Driver发送RegisterExecutor消息
- 此处的Driver是在CoarseGrainedSchedulerBackend中定义的,当它收到RegisterExecutor时,调用CoarseGrainedSchedulerBackend的makeOffers方法
- 在makeOffers中,调用launchTasks方法启动任务
- 在launchTasks中,循环提交所有的Task(这本来是一个TaskSet任务集),每次循环给CoarseGrainedExecutorBackend发送LaunchTask消息
- CoarseGrainedExecutorBackend处理LaunchTask时,调用Executor的launchTask方法
- 在Executor的launchTask方法中,提交给Executor中的线程池执行
可见,standalone+client的方式,相对于standalone+cluster的方式,省略了如下三个步骤
- ClientActor给Master发送RequestSubmitDriver消息
- Master给Worker发送LaunchDriver的消息
- Worker创建并启动Driver进程
如下图所示,第二步动作是在AppClient的preStart的registerWithMaster()方法中给Master发送的RegisterApplication消息。所以,Driver实际上并未向Master注册,而是发送了RegisterApplication消息。
相关推荐
Spark Standalone 是 Apache Spark 提供的一种自带的集群管理模式,主要用于管理 Spark 应用程序的执行环境。这种模式简单易用,适合于开发测试以及中小型生产环境。 #### Spark Standalone 部署配置 ##### ...
Spark在YARN模式下有两种提交模式:YARN Client和YARN Cluster。前者中,Driver运行在提交应用程序的工作站上,而后者中,Driver运行在Application Master进程中,由YARN管理。 在具体部署Spark集群的过程中,首先...
在规划Spark Standalone集群时,需要在每台机器上安装Spark,并配置Master和Worker的相关参数。例如,可以将Master节点设置为node01,两个Slave节点为node02和node03。安装步骤包括将Spark安装包上传至服务器,解压...
在Spark内核篇02中,我们主要讨论了Spark在三种不同模式下的运行机制:Yarn模式、Yarn-Client模式和Standalone模式,包括这两种运行模式下的Cluster和Client模式。 首先,我们来看Yarn模式的运行流程: 1. 用户通过...
Client 是 Spark 的入口点,负责提交任务到集群上。Client 的主要组件有 SparkContext、DriverActor 和 ClientActor。 SparkContext 是 Spark 的上下文对象,负责准备任务的执行环境。SparkContext 的主要工作包括...
在不同集群中的运行演示部分,通常会展示如何在Standalone和YARN模式下启动Spark-Shell,如何提交Spark应用程序,并通过具体案例来分析运行结果。同时,在问题解决部分,会针对可能遇到的问题,如YARN-CLIENT启动...
本文将深入探讨Spark的原理及源码分析,首先从Spark运行时的通用流程入手,然后介绍核心组件的角色与职责,以及Spark支持的不同集群部署模式。 在Spark的运行流程中,用户通过`spark-submit`提交应用程序。这个过程...
YARN模式下,Spark运行机制分为client和cluster模式,其中client模式中Driver运行在客户端,而cluster模式中Driver运行在集群内部。 理解Spark内核和部署模式对于优化Spark应用性能和解决运行中遇到的问题具有重要...
- Standalone:Spark自带的简单集群管理器,适合独立部署; - Apache Mesos:分布式资源管理框架,支持多种计算框架; - Hadoop YARN:统一资源管理,支持mapreduce、storm等多种计算框架,有yarn client和yarn ...
在部署Spark Standalone集群时,需要考虑集群的组成和任务调度机制。典型的集群由Driver/Client、Master和Worker组成。Master负责资源分配和任务调度,而Worker负责执行实际的任务。集群中的每个Worker节点可以有多...
- **特点**:在Standalone模式下,Spark应用可以独立部署在一个集群中,通过ZooKeeper解决了单点故障问题。Standalone模式下的资源管理较为简单,每个Worker节点上的资源被抽象成若干个slot,根据任务需求进行分配...
- **Client模式**:应用在客户端(提交任务的机器)上运行,Spark Master仅负责调度,应用结果在客户端的控制台可见。 4. **高可用性(HA)配置**:通过ZooKeeper实现Spark Master的高可用。在`spark-env.sh`中...
- Spark架构包括Driver、Executor和Scheduler等组件,作业提交流程涉及Driver向资源管理器(如YARN的ResourceManager)申请资源,启动Executor,然后Executor执行任务。 - 在YARN的client模式下,Driver运行在...
3. `--deploy-mode`: 指定部署模式,可选 `client`(客户端模式)或 `cluster`(集群模式)。客户端模式下,驱动程序在提交任务的机器上运行;而在集群模式下,驱动程序在集群内部运行。 4. `--jars`: 添加额外的 ...
当需要从集群外部提交 Spark 任务时,需要进行特定的配置和操作: 1. **环境配置**: - 需要在集群内部为提交任务的用户设置相应的权限。 - 创建用户根目录 `/user/[username]`,确保用户有权对该目录进行操作。 ...
在Spark on YARN模式下,又分为Cluster和Client两种部署模式。Cluster模式下,Driver程序在ResourceManager上运行,而Client模式下,Driver在提交应用程序的客户端上运行。 接下来,我们将按照以下步骤进行配置: ...
在提交任务时,可以选择client或cluster模式,client模式下,驱动程序运行在提交任务的工作站上,而cluster模式下,驱动程序由集群管理器在集群内部启动,这样可以减轻客户端的负担。 Spark支持多种编程语言,包括...
文档提供了本地模式和集群模式的启动方法,如使用start-all.sh脚本启动所有组件,以及使用run-example命令验证Spark的计算能力,包括本地模式和在不同集群模式下的测试。 在Spark的配置与优化方面,文档详细介绍了...
`spark-submit`是Apache Spark的核心组件之一,用于提交Spark应用程序到集群进行执行。它是一个命令行工具,提供了丰富的参数选项来定制应用的运行环境。以下是对`spark-submit`工具主要参数的详细说明: 1. **--...