. 代码打包
(1)使用 Maven 打包(适用于 Java/Scala 项目)
-
确保项目中有一个
pom.xml
文件,定义项目的依赖关系和构建配置。 -
在
pom.xml
文件中添加 Spark 相关依赖,例如:xml
复制
<dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-core_2.12</artifactId> <version>3.3.0</version> </dependency> <dependency> <groupId>org.apache.spark</groupId> <artifactId>spark-sql_2.12</artifactId> <version>3.3.0</version> </dependency>
其中版本号需根据集群中 Spark 的版本选择,
2.12
是 Scala 的版本号。 -
在项目根目录下运行
mvn package
命令,Maven 会根据pom.xml
文件中的配置,下载依赖并打包项目。打包后的 JAR 文件会出现在target
文件夹中。
(2)使用 SBT 打包(也适用于 Scala 项目)
-
项目中有一个
build.sbt
文件,用于定义项目构建配置。 -
在
build.sbt
文件中添加 Spark 依赖,例如:scala
复制
libraryDependencies += "org.apache.spark" %% "spark-core" % "3.3.0" libraryDependencies += "org.apache.spark" %% "spark-sql" % "3.3.0"
-
在项目根目录下运行
sbt package
命令,sbt 会进行项目打包,打包后的 JAR 文件同样在target
文件夹中。
(3)对于 Python 项目(使用 PySpark)
-
如果是简单的脚本,可以将代码文件直接上传到集群。
-
如果项目依赖较多,可以使用
zipfile
模块将代码文件和依赖打包成一个 zip 文件。例如:Python
复制
import zipfile with zipfile.ZipFile('my_spark_project.zip', 'w') as zipf: zipf.write('main.py') # 主程序文件 zipf.write('module1.py') # 自定义模块文件 zipf.write('module2.py')
然后将这个 zip 文件上传到集群。
2. 提交到 Spark 集群运行
(1)使用 spark-submit
命令(适用于所有语言的 Spark 作业)
-
基本语法:
bash
复制
spark-submit \ --class <main-class> \ --master <master-url> \ --deploy-mode <deploy-mode> \ --conf <key>=<value> \ --py-files <python-files> \ <application-jar> \ [application-arguments]
-
举例:
-
对于 Java/Scala 项目,假设打包后的 JAR 文件是
my-spark-app.jar
,主类是com.example.MySparkApp
,集群的 master 地址是spark://master:7077
,运行在集群模式(cluster
),并且需要设置一些配置参数,如:bash
复制
spark-submit \ --class com.example.MySparkApp \ --master spark://master:7077 \ --deploy-mode cluster \ --conf spark.executor.memory=4g \ my-spark-app.jar \ arg1 arg2
其中
arg1
和arg2
是传递给主类的参数。 -
对于 Python 项目,假设主脚本文件是
main.py
,集群是 YARN 资源管理器,运行在客户端模式(client
),可以这样提交:bash
复制
spark-submit \ --master yarn \ --deploy-mode client \ --py-files my_spark_project.zip \ main.py \ arg1 arg2
这里
--py-files
参数用于指定附加的 Python 文件,main.py
是主脚本文件,arg1
和arg2
是传递给脚本的参数。
-
(2)通过集群管理工具提交(如 YARN、Kubernetes)
-
如果集群使用的是 YARN 作为资源管理器,
spark-submit
命令会与 YARN 集成。可以在spark-submit
命令中添加一些 YARN 相关的配置参数,例如:bash
复制
spark-submit \ --master yarn \ --deploy-mode cluster \ --num-executors 10 \ --executor-memory 4g \ --executor-cores 4 \ my-spark-app.jar
这里
--num-executors
指定要分配的执行器数量,--executor-memory
指定每个执行器的内存大小,--executor-cores
指定每个执行器的 CPU 核心数。 -
如果集群使用 Kubernetes,需要在
spark-submit
命令中指定 Kubernetes