spark app提交流程之cluster模式

spark app提交流程之Cluster模式

前言

前面第一篇已经扒了一点以client模式提交app的部分源码流程了,当前这一篇就是以cluster模式提交app的部分流程。
接下来省略掉与driver相同部分的代码流程,直接进到差异的流程。

一、提交APP

1.1在hdp003节点提交app

在这里插入图片描述
在这里插入图片描述

1.2 然后cluster执行的代码会走这里

所以childMainClass的值是YarnClusterApplication类
在这里插入图片描述

二、申请资源的前期准备

2.1 反射调用YarnClusterApplication对象

它也是通过反射的方式获取了YarnClusterApplication对象。然后调用了start方法。看一下
在这里插入图片描述

2.2 YarnClusterApplication的start方法。

在这里插入图片描述

2.3创建Client对象。

1.这个client对象的构造器里面是先获取yarn客户端,然后准备好要向yarn申请一个container的资源大小用来跑driver,等。
在这里插入图片描述

三、申请一个container的用于执行driver

3.1执行run方法。

主要就是向RM申请一个container用于执行driver。
this.appId = submitApplication()

3.2 submitApplication方法

1.先通过launcherBackend进行连接.(连接啥?要做什么?)
2.然后初始化yarn客户端并启动,再通过yarn客户端向RM申请一个新的app。
3.然后以newAppResponse作为参数传入createContainerLauncheContext方法。
在这里插入图片描述

2.重要的几行代码
在这里插入图片描述
newAppResponse也没有啥东西,就携带要申请的container的内存,cpu参数。以及appid.
在这里插入图片描述

正如在xshell客户端所看的Client日志就是当前在申请资请日志。

<think>好的,用户现在问的是Spark提交方式共有哪几种。我需要先回顾一下Spark的不同部署模式以及对应的提交方式。记得Spark可以通过spark-submit脚本提交,这是最常用的方式,支持多种集群管理器,比如Standalone、YARN、Mesos,还有Kubernetes。然后可能还有通过其他工具比如spark-shell或者集成到应用中的方式提交作业。 首先,用户可能想知道不同的集群管理模式下的提交方式是否有区别。比如,Standalone模式下和YARN模式下的提交命令有什么不同。此外,用户可能也关心除了命令行提交之外,有没有其他的方式,比如通过REST API或者编程方式提交。 然后,我需要分清楚不同的部署模式,比如本地模式、Standalone集群、YARN、Mesos、Kubernetes。每种模式提交作业的方式可能略有不同,但主要都是通过spark-submit脚本,只是参数不同。例如,使用YARN时,需要指定--master yarn,而Kubernetes则需要--master k8s://...。 另外,可能还需要提到spark-submit的参数,比如--deploy-mode client或者cluster,这会决定driver程序运行的位置。用户可能想知道这两种部署模式的区别以及如何选择。 还有,用户可能在使用某些云服务提供商的Spark服务时,比如AWS EMR或Databricks,会有特定的提交方式,比如通过网页控制台或特定的CLI工具。不过这些属于平台特定的扩展,可能不在基础回答范围内,但可以简要提及。 需要注意用户是否有特定的环境,比如他们是否在使用YARN或者Kubernetes,但用户的问题比较通用,所以需要覆盖所有主要的提交方式。此外,需要确保回答结构清晰,分点列出,并且每个提交方式给出例子和适用场景,这样用户更容易理解。 另外,用户可能对spark-submit的具体参数感兴趣,比如如何指定应用的主类、资源分配等,但问题主要关注提交方式,所以可能需要简要带过参数,重点放在不同的集群管理模式上。 最后,要检查是否有遗漏的提交方式,比如通过Spark Job Server或者Livy这样的REST服务提交作业,这些虽然属于扩展工具,但也可以作为补充说明,帮助用户了解更多的可能性。 总结起来,回答的结构应该是先总述Spark提交方式,然后分点列出不同的集群管理器下的具体方法,并给出示例命令,最后提到其他可能的工具或方式。同时,强调spark-submit是最主要的工具,不同的master URL和deploy-mode的组合构成了不同的提交方式。</think>Spark 的作业提交方式主要取决于 **集群管理模式** 和 **部署环境**,以下是常见的几种提交方式: --- ### **1. 本地模式(Local Mode)** 直接在单机上运行,无需集群,适合测试和调试。 **提交命令**: ```bash spark-submit \ --master local[4] \ # 使用4个本地线程 --class com.example.Main \ # 主类 /path/to/your-app.jar # 应用JAR包 ``` --- ### **2. Standalone 集群模式** 使用 Spark 自带的 Standalone 集群管理器。 **提交命令**: ```bash spark-submit \ --master spark://master-node:7077 \ # 集群Master节点地址 --deploy-mode cluster \ # Driver运行在集群 --executor-memory 4G \ --class com.example.Main \ /path/to/your-app.jar ``` --- ### **3. Hadoop YARN 模式** 集成 Hadoop YARN 资源管理器,分为两种部署模式: #### **(1) Client 模式** Driver 运行在提交作业的客户端机器。 ```bash spark-submit \ --master yarn \ --deploy-mode client \ # 默认模式 --executor-cores 2 \ --class com.example.Main \ your-app.jar ``` #### **(2) Cluster 模式** Driver 运行在 YARN 集群的容器中。 ```bash spark-submit \ --master yarn \ --deploy-mode cluster \ # Driver在集群运行 --num-executors 10 \ --class com.example.Main \ your-app.jar ``` --- ### **4. Apache Mesos 模式** 使用 Mesos 作为资源管理器(已逐渐被淘汰)。 ```bash spark-submit \ --master mesos://mesos-master:5050 \ --conf spark.mesos.role=production \ --class com.example.Main \ your-app.jar ``` --- ### **5. Kubernetes 模式** 在 Kubernetes 集群上运行 Spark 作业(Spark 2.3+ 支持)。 ```bash spark-submit \ --master k8s://https://kubernetes-api-server:443 \ --deploy-mode cluster \ --conf spark.kubernetes.container.image=spark:latest \ --class com.example.Main \ your-app.jar ``` --- ### **6. 通过 Spark Shell 交互提交** 在 `spark-shell` 或 `pyspark` 中直接运行代码(主要用于开发调试): ```scala // Scala 示例 val data = spark.read.csv("hdfs://path/to/data") data.show() ``` --- ### **7. REST API 提交** 通过 Spark 的 REST API 提交作业(需启用 `spark.master.rest.enabled`): ```bash curl -X POST http://spark-master:6066/v1/submissions/create \ -H "Content-Type: application/json" \ -d '{ "action": "CreateSubmissionRequest", "appArgs": [], "appResource": "file:/path/to/your-app.jar", "clientSparkVersion": "3.3.0", "mainClass": "com.example.Main" }' ``` --- ### **核心参数总结** | 参数 | 说明 | |--------------------|--------------------------------------------------------------------| | `--master` | 指定集群管理器地址(如 `local`, `yarn`, `spark://host:port`, `k8s://...`) | | `--deploy-mode` | 选择 `client` 或 `cluster`(决定 Driver 运行位置) | | `--executor-memory`| 设置每个 Executor 的内存(如 `4G`) | | `--num-executors` | 指定 Executor 数量 | --- ### **适用场景建议** - **本地开发**:优先使用 `local` 模式- **生产环境**:推荐 YARN 或 Kubernetes(资源管理更成熟)。 - **临时调试**:通过 `spark-shell` 快速验证逻辑。 - **自动化作业**:通过 REST API 或脚本调用 `spark-submit`。 如果需要更具体的配置示例,请提供你的集群环境类型(如 YARN/Kubernetes)。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值