Spark启动命令行是使用Apache Spark集群或本地模式运行应用程序的核心方式,通过命令行可以灵活配置资源、指定应用程序入口及各项参数,无论是开发调试还是生产部署,掌握Spark启动命令行的使用方法都是必备技能,以下将从基本语法、常用参数、部署模式及实际案例等方面进行详细说明。

Spark应用程序的启动主要通过spark-submit
脚本实现,该脚本位于Spark安装目录的bin
目录下。spark-submit
的作用是将应用程序打包后的JAR文件或Python脚本提交到Spark集群上运行,同时支持多种部署模式,如local(本地模式)、standalone(独立集群模式)、YARN(Hadoop集群资源管理器)和Mesos等,基本语法结构为:spark-submit [options] <app jar | python file> [app arguments]
,其中options
为Spark运行时的配置参数,app jar
或python file
为用户编写的应用程序代码,app arguments
为传递给应用程序的额外参数。
在spark-submit
的众多参数中,资源相关配置是核心部分,通过--master
参数可以指定运行模式,例如local[*]
表示本地利用所有CPU核心,spark://master:7077
表示连接到独立的Spark集群主节点,yarn
表示使用YARN集群模式。--deploy-mode
参数用于指定部署方式,client
模式下驱动程序运行在客户端节点,适合调试;cluster
模式下驱动程序运行在集群工作节点,适合生产环境,资源参数方面,--driver-memory
设置驱动程序的内存(如2g
),--driver-cores
设置驱动程序的CPU核心数(仅适用于YARN的cluster模式);--executor-memory
设置每个执行器的内存(如4g
),--executor-cores
设置每个执行器的CPU核心数,--num-executors
设置执行器总数,这些参数共同决定了集群资源的分配。
Spark还提供了丰富的性能调优和功能参数。--conf
可以动态配置Spark属性,如--conf spark.sql.shuffle.partitions=200
设置shuffle分区数;--jars
用于添加额外的依赖JAR文件,多个JAR用逗号分隔;--py-files
指定Python依赖的.zip、.egg或.py文件;--files
和--archives
可分发额外的配置文件或压缩包到集群节点;--name
为应用程序指定名称,方便监控;--queue
在YARN模式下指定资源队列;--verbose
会打印详细的提交日志,便于调试,对于Python应用,还可通过--packages
、--exclude-packages
等参数管理第三方依赖,如--packages org.apache.spark:spark-sql-kafka-0-10_2.12:3.3.0
添加Kafka连接器。
不同部署模式下,参数配置存在差异,在本地模式中,仅需设置--master local[N]
,N为并行度,无需其他集群相关参数,独立模式下,需先启动Spark集群的Master节点(通过sbin/start-master.sh
),然后启动Worker节点(sbin/start-worker.sh spark://master:7077 -c 2 -m 8g
),最后通过--master spark://master:7077
提交应用,并可配置--total-executor-cores
和--executor-memory
限制资源,YARN模式下,需确保Hadoop和YARN环境配置正确,通过--master yarn
提交,--deploy-mode
可选client或cluster,同时需配置--queue
、--driver-memory
等参数以适配YARN的资源调度策略,Mesos模式类似,需指定--master mesos://master:5050
,并可能需要额外配置认证信息。

以一个Python WordCount程序为例,假设代码文件为wordcount.py
,依赖文件为deps.zip
,在本地运行可执行:spark-submit --master local[4] --py-files deps.zip wordcount.py hdfs://input hdfs://output
;在YARN集群模式运行则需执行:spark-submit --master yarn --deploy-mode cluster --num-executors 5 --executor-memory 4g --executor-cores 2 --py-files deps.zip wordcount.py hdfs://input hdfs://output
,该命令会申请5个执行器,每个4GB内存、2个核心,并将驱动程序部署在集群中。
为了更直观地展示常用参数及其作用,以下列出部分核心参数的说明:
参数名 | 作用示例 | 说明 |
---|---|---|
--master |
--master spark://master:7077 |
指定Spark集群地址或运行模式 |
--deploy-mode |
--deploy-mode cluster |
驱动程序部署位置,client或cluster |
--driver-memory |
--driver-memory 2g |
驱动程序内存大小 |
--executor-memory |
--executor-memory 4g |
每个执行器内存大小 |
--executor-cores |
--executor-cores 2 |
每个执行器CPU核心数 |
--num-executors |
--num-executors 10 |
执行器总数量 |
--jars |
--jars jar1.jar,jar2.jar |
添加额外依赖JAR文件 |
--py-files |
--py-files script.py,deps.zip |
添加Python依赖文件 |
--conf |
--conf spark.sql.shuffle.partitions=100 |
动态配置Spark属性 |
--name |
--name "MySparkApp" |
应用程序名称 |
通过合理配置这些参数,可以充分发挥Spark的性能优势,同时适配不同的业务场景和集群环境,在实际使用中,建议根据应用特点和集群资源状况,逐步调整参数以找到最优配置,例如通过监控Spark UI(默认端口4040)观察任务执行情况,优化shuffle操作和内存使用。
相关问答FAQs

Q1: 如何在Spark启动时动态修改配置参数?
A1: 使用--conf
参数可以动态修改Spark配置,例如spark-submit --conf spark.sql.adaptive.enabled=true --conf spark.default.parallelism=100
,该参数可以多次使用以设置多个配置项,优先级高于Spark的默认配置和配置文件中的设置,也可在代码中通过SparkConf
对象设置配置,但--conf
参数更适合在提交时灵活调整,无需修改代码。
Q2: 为什么在YARN模式下推荐使用--deploy-mode cluster
?
A2: 在YARN的cluster
模式下,驱动程序运行在集群的工作节点上,客户端提交任务后即可释放资源,适合生产环境,因为客户端节点无需保持运行,且驱动程序与集群网络隔离更安全,而client
模式下驱动程序在客户端运行,便于调试和查看日志,但客户端节点需要保持存活,且可能因网络问题影响任务稳定性,因此调试时可使用client
模式,生产环境推荐cluster
模式。