
文章目录
[Spark-Submit 参数详解](#Spark-Submit 参数详解)
在 Spark 中,spark-submit 是用于将应用程序提交到集群运行的命令行工具。通过 spark-submit,用户可以将编写好的 Spark 作业提交到不同的集群管理器(如 Standalone、YARN、Mesos、Kubernetes 等)上执行。合理配置 spark-submit 参数,不仅决定了作业能否正常运行,还直接影响资源利用率和执行效率。本文对 spark-submit 的常用参数进行系统梳理,并给出实践建议。
一、基本参数
基本参数用于指定作业的运行环境、入口类和依赖资源,是提交作业时最常用的一组配置。
- --master :指定集群主节点,决定 Spark 程序的运行环境。可以设置为:
local、local[K]、local[*]、spark://HOST:PORT、yarn等。 - --deploy-mode :指定 Driver 部署模式,可选
Client(默认)或Cluster。 - --class:指定 Application 运行主类(包含包名和类名),仅适用于 Java 或者 Scala 程序。
- --name:指定 Application 的名称,便于在集群管理界面中识别作业。
- --jars:以逗号分割的本地 jar 包列表,这些 jar 将包含在 Driver 和 Executor 端。
- --files:以逗号分割的文件列表,这些文件会分发到集群中的每个 Worker 节点。
- --conf :以
key=value形式指定 Spark 配置属性。 - --supervise :只适用于 Standalone 和 Mesos 集群中。指定该参数后,在 Cluster 模式下如果 Driver 失败,会自动重启。
二、资源相关参数
资源相关参数用于控制 Driver 和 Executor 的内存、CPU 核数以及实例数量,是影响作业性能的关键配置。需要注意的是,不同集群管理器支持的参数范围存在差异。
- --driver-memory:设置 Driver 程序的内存大小,默认 1024M。
- --executor-memory:设置每个 Executor 的内存,默认 1G。
- --driver-cores :只适用在 Cluster 模式中。设置 Driver 使用的 core 数,默认 1。
- --total-executor-cores :只适用于 Standalone 和 Mesos 集群中。设置所有 Executor 使用的总 core 数,默认 Standalone 中会使用所有集群中的 core。
- --executor-cores :只适用于 Standalone、YARN 和 K8s 集群中 。设置每个 Executor 使用的核数。YARN 和 K8s 集群中默认为 1,Standalone 集群中默认为当前 Worker 节点的所有 core 数。
- --num-executors :只适用于 YARN 和 K8s 集群中。设置启动 Executor 的个数,默认 2 个。
- --queue :只适用于 YARN 集群中。指定使用的资源队列。
三、参数配置实践建议
在实际使用中,参数配置需要结合集群规模、数据量和作业类型综合考虑,以下是几点常见建议:
- 先明确集群管理器 :不同集群管理器支持的参数不同,例如
--num-executors仅适用于 YARN 和 K8s,配置前应先确认运行环境。 - 合理设置 Executor 资源:Executor 内存过小容易导致频繁 GC 甚至 OOM,过大则可能浪费资源;通常建议单个 Executor 使用 2 到 5 个 core,并配合适当的内存比例。
- 关注 Driver 内存 :当作业中存在大量
collect、广播变量或复杂 DAG 时,应适当调大--driver-memory。 - 使用 --conf 精细化调优 :序列化方式、Shuffle 分区数、动态资源分配等都可以通过
--conf传入,便于在不修改代码的情况下调整作业行为。 - 依赖管理 :第三方依赖优先通过
--jars或--packages引入,避免因类路径缺失导致作业启动失败。
四、总结
spark-submit 是 Spark 作业提交的统一入口,其参数大致可以分为两类:一类是基本参数 ,用于指定运行环境、主类、名称和依赖资源;另一类是资源相关参数,用于控制 Driver 与 Executor 的内存、核数和实例数量。掌握这些参数的含义和适用范围,是进行 Spark 作业调优的第一步。
在实际生产中,建议遵循"先保证正确运行,再逐步优化资源"的思路:先通过 --master、--class、--jars 等参数确保作业能够正常提交和执行,再结合集群监控数据调整 --executor-memory、--executor-cores、--num-executors 等资源参数,最终在稳定性与资源成本之间取得平衡。
- 📢博客主页:https://lansonli.blog.csdn.net
- 📢欢迎点赞 👍 收藏 ⭐留言 📝 如有错误敬请指正!
- 📢本文由 Lansonli 原创,首发于 CSDN博客🙉
- 📢停下休息的时候不要忘了别人还在奔跑,希望大家抓紧时间学习,全力奔赴更美好的生活✨