Spark 部署模式

Spark四大部署模式详解

一、Local 模式

        所谓 Local 模式,就是不需要其他任何节点资源就可以在本地执行 Spark 代码的环境,一般用于教学、调试、演示等。

1.1 提交应用命令

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master local[2] \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10
  • --class 表示要执行程序的主类;
  • --master local[2] 表示部署模式,默认为本地模式,数字表示分配的虚拟 CPU 核数;
  • 默认 Web UI 端口为 4040

二、Standalone 模式

        Spark 自身节点运行的集群模式,Spark 自身提供计算资源,无需其他框架提供资源,经典的 master-slave 模式。默认 Web UI 端口为 8080。

2.1 提交应用命令

bin/spark-submit \
--class org.apache.spark.examples.SparkPi \
--master spark://linux1:7077 \
./examples/jars/spark-examples_2.12-3.0.0.jar \
10

2.2 参数说明

参数解释可选值举例
--class
Spark 程序中包含主函数的类
--master
Spark 程序运行的模式(环境)
模式:local[*]spark://linux1:7077
Yarn
--total-executor-cores
指定所有 executor 使用的cpu 核数
--executor-cores
指定每个 executor 使用的cpu 核数
--executor-memory
指定每个 executor 可用内存

    三、Yarn 模式

            使用 Yarn 作为资源调度框架,执行 Spark 任务前需要先启动 HDFS 以及 YARN 集群。根据 Driver 运行的位置,又分为 Cluster 模式和 Client 模式。

    3.1 Cluster 模式

    3.1.1 特点

    • Driver 程序在 Yarn 集群的 ApplicationMaster 中运行;
    • 客户端提交作业后可以断开连接
    • 完整的资源管理和作业监控由 Yarn 负责
    • Driver 故障可由 Yarn 重启
    • 网络要求较低

    3.1.2 提交应用命令

    bin/spark-submit \
      --class com.example.SparkApp \
      --master yarn \
      --deploy-mode cluster \
      --executor-memory 2g \
      --num-executors 4 \
      /path/to/your-app.jar

    3.1.3 参数说明

    参数解释
    --class
    Spark 程序中包含主函数的类
    --master
    Spark 程序运行的模式(环境)
    --deploy-mode指定提交模式
    --driver-cores 指定 Driver 可用的 cpu 核数
    --driver-memory指定 Driver 可用内存
    --num-executors指定 executor 个数
    --executor-cores
    指定每个 executor 可用的 cpu 核数
    --executor-memory
    指定每个 executor 可用内存

    3.1.4 工作流程

    1. 用户提交应用:通过 spark-submit 从客户端机器提交作业,并指定 --deploy-mode cluster

    2. ResourceManager 分配容器:ResourceManager(RM)找到一个合适的 NodeManager(NM)节点,并在该节点上启动一个容器来运行 ApplicationMaster。

    3. 启动 ApplicationMaster(内含 Spark Driver):在这个容器中,启动的正是 Spark ApplicationMaster,它本身包含了 Spark Driver 程序。

    4. Driver 注册并申请资源:Driver 向 ResourceManager 注册应用,并申请用于运行 Spark Executor 的资源容器。

    5. 启动 Executors:ResourceManager 指示其他 NodeManagers 启动 Executor 容器。这些 Executors 启动后会直接与在 AM 中的 Driver 通信。

    6. 执行应用:Driver 调度任务到各个 Executor 上执行。

    7. 应用结束:所有任务执行完毕后,Driver 向 ResourceManager 注销,并关闭自己所在的 AM 容器。

    3.2 Client 模式

    3.2.1 特点

    • Driver 在客户端:客户端必须在整个应用运行期间保持网络连通。

    • 适合交互和调试spark-shell 和 pyspark 默认使用此模式,因为 Driver 在本地,用户可以即时看到输出并与 Spark 进行交互。

    • 日志直观:Driver 的日志直接输出在客户端的控制台,方便实时调试。

    • 不适合生产:如果客户端断开或关闭,整个应用会失败。

    3.2.2 提交应用命令

    bin/spark-submit \
    --master yarn \
    --deploy-mode client \
    --driver-cores 2 \
    --driver-memory 4g \
    --num-executors 4 \
    --executor-cores 3 \
    --executor-memory 4g \
    --conf spark.sql.shuffle.partitions=24 \
    --conf spark.default.parallelism=24 \
    --conf spark.ui.port=8095 \
    --jars /data/job/spark/lib/test-withoutdep.jar \
    --class com.example.SparkApp \
    /data/job/spark/test.jar

    3.2.3 参数说明

    参数解释
    --class
    Spark 程序中包含主函数的类
    --master
    Spark 程序运行的模式(环境)
    --deploy-mode指定提交模式
    --driver-cores 指定 Driver 可用的 cpu 核数
    --driver-memory指定 Driver 可用内存
    --num-executors指定 executor 个数
    --executor-cores
    指定每个 executor 可用的 cpu 核数
    --executor-memory
    指定每个 executor 可用内存
    spark.sql.shuffle.partitions设置 Spark SQL shuffle 操作的分区数
    spark.default.parallelism设置 RDD 的默认并行度
    spark.ui.port设置 Spark Web UI 的端口号
    --jars指定额外的依赖 JAR 包路径

    3.2.4 工作流程

    1. 用户提交应用:通过 spark-submit 或 spark-shell 从客户端机器提交作业,默认或指定 --deploy-mode client

    2. 启动 Driver:Spark Driver 直接在客户端 JVM 中启动。

    3. Driver 向 YARN 申请 AM:Driver 直接与 ResourceManager 通信,请求启动一个 ApplicationMaster。

    4. ResourceManager 启动 AM:RM 找到一个 NM 节点并启动一个轻量级的 ApplicationMaster 容器。这个 AM 的主要职责是向 RM 申请 Executor 资源,它不包含 Spark Driver。

    5. 启动 Executors:ResourceManager 指示 NodeManagers 启动 Executor 容器。这些 Executors 启动后会与运行在客户端的 Driver 通信。

    6. 执行应用:Driver(在客户端)调度任务到各个 Executor 上执行。

    7. 应用结束:所有任务执行完毕后,Executor 容器被释放,AM 容器也被关闭。但客户端的 Driver 进程会退出。

    四、K8s & Mesos 模式

    使用 K8s 或者 Mesos 作为资源调度框架。

    评论
    成就一亿技术人!
    拼手气红包6.0元
    还能输入1000个字符
     
    红包 添加红包
    表情包 插入表情
     条评论被折叠 查看
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

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

    抵扣说明:

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

    余额充值