当前位置: 首页 > news >正文

辨析Spark 运行方式、运行模式(master)、部署方式(deploy-mode)

为了理清 Spark 运行方式、部署模式(master)、部署方式(deploy-mode) 之间的关系,我们先明确几个核心概念,再对比它们的联系与区别。

一、核心概念解析

1. Spark 运行方式(代码执行方式)

指 如何启动和运行 Spark 代码

就是代码在哪上面运行

常见有三种:

  • REPL 方式(交互式)

    • 工具spark-shell(Scala/Java)、pyspark(Python)、spark-sql(SQL)。
    • 特点
      • 直接在命令行中输入代码,实时交互式执行(类似 Python 的 ipython)。
      • 仅适用于开发调试,无法用于生产环境(代码无法保存、性能差)。
      • 默认运行模式:通常是 本地模式(local),因为交互式环境一般在单节点执行。
  • spark-submit 方式(任务提交)

    • 流程
      1. 先将代码打包成 JAR 包(或 Python 脚本)。
      2. 通过 spark-submit 命令提交到 Spark 集群(或本地)运行。
    • 特点
      • 生产环境唯一方式,支持各种部署模式(本地、YARN、Spark Standalone 等)。
      • 可通过参数(如 --master--deploy-mode)灵活配置运行环境。
  • 集成开发环境(IDE,如 IDEA)

    • 流程
      在 IDE 中编写代码,直接运行(需配置 Spark 依赖和环境)。
    • 特点
      • 用于开发调试,本质上是 本地模式运行(类似 REPL,但可调试代码)。
      • 不涉及集群部署,适合单机测试。

更详细的Spark运行方式请见

辨析Spark代码的不同运行方式:交互,submit,集成开发环境-CSDN博客

2. 运行模式(master 参数)

指 Spark 应用运行时的资源管理方式,通过 --master 指定,决定了任务运行在 单机 还是 集群

简单来说就是指定 Spark 应用在哪里运行(单机 / 集群 / 云平台)

  • 本地模式(local)

    • 场景:单机测试(如开发阶段)。
    • 示例
      • --master local:单线程,仅用 1 个 CPU 核心。
      • --master local[2]:2 个线程,模拟多任务并行(但仍在单节点)。
    • 特点
      • 不涉及集群,所有任务在 本地 JVM 中运行,无需启动集群服务。
      • 适合调试代码逻辑,但无法测试集群环境的资源调度、容错等特性。
  • 集群模式(YARN/Spark Standalone/Kubernetes)

    • 场景:生产环境,多节点分布式计算。
    • 示例
      • YARN 模式:--master yarn(需指定 --deploy-mode)。
      • Spark Standalone 模式:--master spark://host:port(Spark 自带的集群管理)。
    • 特点
      • 需要一个 集群资源管理器(如 YARN)分配资源。
      • 任务会被分发到集群中的多个节点执行,支持高并发、高可用。
3. 部署方式(deploy-mode 参数)

仅在 集群模式(master 为 yarn/spark://...) 下有效,决定 Driver 进程的位置

其实就是指定 Driver 进程的运行位置(本地客户端 / 集群节点)

  • client 模式

    • Driver 运行位置:提交任务的节点(如本地机器或集群中的某节点)。
    • 适用场景
      • 交互式任务(如 spark-sql),需实时查看日志和结果。
      • 开发调试阶段,方便直接观察 Driver 输出。
    • 限制
      • 提交任务的节点必须与集群保持网络连通,否则 Driver 会挂掉。
      • 生产环境中若本地机器宕机,任务会失败。
  • cluster 模式

    • Driver 运行位置:集群内部的某个节点(由资源管理器分配)。
    • 适用场景
      • 生产环境,Driver 与 Executor 均在集群内,稳定性更高。
      • 任务提交后可断开本地连接,不影响运行(如后台任务)。
    • 特点
      • 日志需通过集群命令(如 yarn logs)查看,无法实时在本地显示。

更详细的辨别运行模式和部署方式,请见

Spark 的运行模式(--master) 和 部署方式(--deploy-mode)-CSDN博客

二、三者的联系与区别

维度REPL 方式spark-submit 方式IDE 运行
本质交互式命令行工具任务提交工具(生产环境核心)开发工具(本地调试)
支持的 master仅 local 模式所有模式(local/yarn/standalone)仅 local 模式
是否需要打包不需要(直接输入代码)需要(打成 JAR 或脚本)不需要(IDE 直接运行)
deploy-mode不涉及(仅本地)集群模式下需指定(client/cluster)不涉及(仅本地)

三、常见场景举例

1. 本地调试(开发阶段)
  • 需求:测试代码逻辑,不涉及集群。
  • 方式
    • 用 spark-shell 或 IDE(如 IDEA)直接运行,master 默认是 local
    • 示例:
      spark-shell  # 自动以 local 模式启动,单线程
      
2. 单机模拟多线程(测试并行逻辑)
  • 需求:在本地用多个线程模拟分布式任务并行。
  • 方式
    • 用 spark-submit 指定 --master local[2]
    • 示例:
      spark-submit --master local[2] --class MyApp myapp.jar
      
3. 提交到 YARN 集群(生产环境)
  • 需求:在多节点集群上运行任务,Driver 位于集群内。
  • 方式
    • spark-submit 指定 --master yarn --deploy-mode cluster
    • 示例:
      spark-submit \--master yarn \--deploy-mode cluster \--class MyApp \myapp.jar arg1 arg2
      

四、总结:为什么会混淆?

  1. 运行方式 vs 部署模式

    • 运行方式(REPL/IDE)是 开发工具,仅用于本地调试;spark-submit 是 提交工具,支持所有环境。
    • 运行模式(master)决定任务运行在 单机 还是 集群,与代码的运行方式无关(但 REPL/IDE 只能用本地模式)。
  2. deploy-mode 仅在集群模式下有效

    • 本地模式(local)没有集群节点,因此无需区分 Driver 位置,deploy-mode 参数被忽略。
    • 只有当 master 是 yarn或者spark://... 时,才需要考虑 client 或 cluster 模式。

通过 “代码的运行方式管开发,master 管资源在哪里,deploy-mode 管 Driver 在哪里” 的逻辑,可快速理清三者关系。实际使用中,开发阶段用 REPL/IDE(本地模式),生产环境用 spark-submit 提交到集群(指定 master 和 deploy-mode)。

五、大总结

前置说明

Spark Local(本地)

 Spark Standalone(集群)

Spark on Yarn(集群)

http://www.xdnf.cn/news/518275.html

相关文章:

  • 网络流算法
  • Hugo安装Stack主题
  • 网络I/O学习(一)
  • freertos智能时钟开发环境详细搭建指南:从零开始的freertos智能时钟学习之路
  • 180KHz 60V 5A开关电流升压/升降压型DC-DC转换器XL4019升降压芯片
  • 最新最热门的特征提取方式:CVOCA光学高速复值卷积
  • 【JavaWeb】JDBC
  • React响应事件中onClick={handleClick} 的结尾有没有小括号的区别
  • [ctfshow web入门] web119
  • C++实现伽罗华域生成及四则运算(二)
  • 小记录111
  • Day29
  • 基于Spring Cloud Sentinel自研Slot扩展实战
  • AI图像处理之ComfyUI节点(二)
  • CSS动画实现
  • React方向:react脚手架的使用
  • 【快速解决】彻底卸载VMWare
  • 2025.5.17总结
  • 时间服务器深度解析与实战指南:从原理到企业级部署
  • GO学习指南
  • INA226 高侧/低侧测量、双向电流/功率监视器,具有I2C兼容接口
  • 处理金融数据,特别是股票指数数据,以计算和分析RSRS(相对强度指数)
  • NE555双音门铃实验
  • 电子电路:阻抗是什么,容抗又是什么?
  • Python打卡 DAY 29
  • Baklib赋能企业知识资产AI化升级
  • Python 中二维列表(list)(嵌套列表)详解
  • 3Dmax中用RayFire实现破碎动画效果
  • Python黑魔法与底层原理揭秘:突破语言边界的深度探索
  • TensorRT