Spark-spark on Yarn 两种运行模式

本文探讨了客户端直显与集群模式在开发中的应用,重点介绍为何推荐Cluster模式,并解释两者在实际项目中的角色。

原理:
在这里插入图片描述

1.Client模式
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
客户端直接显示结果
在这里插入图片描述

2.Cluster模式-[开发推荐使用]
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述
客户端不显示结果
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

<think> 嗯,用户这次问的是Spark on YARN两种模式的详细区别和联系,这是个很具体的分布式计算框架部署问题。用户可能正在搭建大数据平台,或者在做技术选型,需要深入理解两种模式的适用场景。 从技术细节来看,YARN集群模式和客户端模式的核心差异在于Driver程序的运行位置。集群模式下Driver在YARN集群内部运行,客户端模式则在提交作业的机器上运行。这个区别会引发一系列连锁反应: 在容错性方面,集群模式明显更优。因为Driver在YARN集群内部,如果提交作业的客户端断开连接,作业还能继续运行。而客户端模式下,如果提交作业的机器宕机,整个作业就会失败。这点对生产环境特别重要。 资源管理上也有差异。集群模式下Driver占用的资源由YARN统一管理,不会影响客户端机器。客户端模式则可能因为Driver的资源消耗影响提交作业的机器性能,特别是当Driver需要处理大量数据时。 网络拓扑方面,集群模式的数据本地性更好,因为Driver和Executor在同一个集群内,数据传输走内部网络。客户端模式则需要跨越集群边界传输数据,可能遇到网络带宽瓶颈。 不过客户端模式也有其价值。调试时能看到Driver的实时日志输出非常方便,这在开发阶段是很大的优势。另外当需要与本地资源交互时(比如读取本地文件),客户端模式更直接。 用户可能还关心作业提交后的行为差异。集群模式提交后就与客户端解耦了,客户端可以退出。而客户端模式必须保持连接,这对长期作业不太友好。 最后要强调两种模式在核心架构上是统一的:都由ResourceManager分配资源,NodeManager启动容器,Executor执行任务。选择时主要考虑作业特性:生产环境长期作业用集群模式,开发调试用客户端模式更高效。 </think> Spark on YARN两种部署模式(**Cluster模式**和**Client模式**)在架构、资源管理及适用场景上有显著区别,以下是详细对比: --- ### **一、核心区别** | **特性** | **Cluster 模式** | **Client 模式** | |---------------------|-----------------------------------------------|----------------------------------------------| | **Driver 运行位置** | 在 YARN 集群的 *ApplicationMaster 容器* 内运行 | 在*提交作业的客户端机器*上运行 | | **资源申请** | 由 YARN ResourceManager 启动 ApplicationMaster,再由 AM 申请 Executor 资源 | 客户端直接向 ResourceManager 申请 Executor 资源 | | **客户端依赖** | 作业提交后客户端可断开连接(适合长时作业) | 客户端必须全程保持连接(断开则作业失败) | | **日志访问** | 需通过 YARN 命令查看(`yarn logs -applicationId <appId>`) | Driver 日志直接输出到客户端控制台 | | **网络流量** | Executor 与 Driver 通信在集群内部,效率更高 | Executor 需跨网络与客户端 Driver 通信,可能成为瓶颈 | | **故障影响** | 客户端故障不影响作业运行 | 客户端宕机导致 Driver 终止,作业失败 | --- ### **二、工作流程对比** #### **Cluster 模式流程** 1. 客户端提交作业到 ResourceManager (RM) 2. RM 在某个 NodeManager (NM) 上启动 ApplicationMaster(AM) 3. AM(即 Driver)向 RM 申请 Executor 资源 4. RM 分配容器,AM 在容器中启动 Executor 5. Executor 反向注册到 AM(Driver)执行任务 ```mermaid graph LR A[客户端] -->|1.提交作业| B(RM) B -->|2.分配容器| C[NM启动AM/Driver] C -->|3.申请资源| B B -->|4.分配容器| D[NM启动Executor] D -->|5.注册| C ``` #### **Client 模式流程** 1. 客户端直接启动 Driver 进程 2. Driver 向 RM 申请 Executor 资源 3. RM 在 NM 上分配容器启动 Executor 4. Executor 直接连接客户端上的 Driver ```mermaid graph LR A[客户端 Driver] -->|1.申请资源| B(RM) B -->|2.分配容器| C[NM启动Executor] C -->|3.注册| A ``` --- ### **三、关键联系与共同点** 1. **统一资源管理** 两者均通过 YARN ResourceManager 统一分配集群资源,确保资源隔离与调度公平性[^1]。 2. **Executor 启动方式相同** Executor 均由 YARN NodeManager 在容器中启动,资源分配策略一致。 3. **依赖传递机制** 均通过 `--jars` 或 `spark.yarn.dist.jars` 分发依赖包到集群。 4. **支持动态资源分配** 均可启用 `spark.dynamicAllocation.enabled=true` 动态调整 Executor 数量。 --- ### **四、适用场景建议** | **模式** | **推荐场景** | **不适用场景** | |---------------|---------------------------------------------|----------------------------| | **Cluster** | 生产环境、长期运行作业(如流处理)、需客户端解耦 | 需要实时查看 Driver 日志的场景 | | **Client** | 开发调试、交互式查询(如 spark-shell)、需直接访问 Driver 输出 | 客户端网络不稳定或资源受限时 | > **示例命令** > Cluster模式提交: > ```bash > spark-submit --master yarn --deploy-mode cluster --class Main app.jar > ``` > Client模式提交: > ```bash > spark-submit --master yarn --deploy-mode client --class Main app.jar > ``` --- ### **五、性能与稳定性考量** - **Cluster 模式优势**: - Driver 在集群内,减少网络延迟,提升 Task 调度效率 - 避免客户端单点故障,适合关键任务 - **Client 模式风险**: - 若 Driver 所在客户端负载高,可能成为性能瓶颈 - 客户端退出导致作业中断,需额外守护进程监控 --- ### **总结** | **维度** | **Cluster 模式** | **Client 模式** | |------------|--------------------------|-------------------------| | **可靠性** | ⭐⭐⭐⭐⭐ (高容错) | ⭐⭐ (依赖客户端稳定性) | | **性能** | ⭐⭐⭐⭐ (集群内通信高效) | ⭐⭐⭐ (跨网络通信开销) | | **易用性** | ⭐⭐ (日志查看复杂) | ⭐⭐⭐⭐⭐ (调试便捷) | 根据需求选择模式:**生产环境优先 Cluster 模式,开发调试使用 Client 模式**,以兼顾稳定性和效率[^2]。 ---
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

文文鑫

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

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

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

打赏作者

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

抵扣说明:

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

余额充值