以下是在IDEA中使用Maven构建Spark项目的步骤:
一、环境准备
- 安装JDK
- 确保IDEA配置了JDK 8+(推荐11+)。
- 安装Maven
- 配置Maven环境变量,IDEA中设置Maven路径( File > Settings > Build > Maven )。
- 下载Spark依赖
- 无需本地安装Spark,通过Maven引入依赖。
二、创建Maven项目
- 新建项目
- 在IDEA中选择 Create New Project > Maven > 勾选Create from archetype > 选择 maven-archetype-quickstart ,点击下一步。
- 配置项目信息
- 填写GroupId(如 com.example )、ArtifactId(如 spark-demo ),选择存储路径。
三、编写 pom.xml 文件
添加Spark和Scala依赖(以Spark 3.5.0为例):
xml
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.example</groupId>
<artifactId>spark-demo</artifactId>
<version>1.0-SNAPSHOT</version>
<!-- 声明Scala插件 -->
<properties>
<scala.version>2.12.17</scala.version>
<spark.version>3.5.0</spark.version>
<maven.compiler.source>11</maven.compiler.source>
<maven.compiler.target>11</maven.compiler.target>
</properties>
<!-- 依赖 -->
<dependencies>
<!-- Spark Core -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-core_${scala.version}</artifactId>
<version>${spark.version}</version>
<!-- 开发时使用local模式,无需打包进最终JAR -->
<scope>provided</scope>
</dependency>
<!-- Spark SQL(按需添加其他模块,如spark-streaming) -->
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<!-- Scala语言依赖 -->
<dependency>
<groupId>org.scala-lang</groupId>
<artifactId>scala-library</artifactId>
<version>${scala.version}</version>
</dependency>
</dependencies>
<!-- 插件配置 -->
<build>
<plugins>
<!-- Scala编译插件 -->
<plugin>
<groupId>net.alchim31.maven</groupId>
<artifactId>scala-maven-plugin</artifactId>
<version>4.6.4</version>
<executions>
<execution>
<goals>
<goal>compile</goal>
<goal>testCompile</goal>
</goals>
</execution>
</executions>
</plugin>
<!-- Maven打包插件(可选,用于生成可执行JAR) -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.4.1</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
<configuration>
<filters>
<filter>
<artifact>*:*</artifact>
<excludes>
<exclude>META-INF/*.SF</exclude>
<exclude>META-INF/*.DSA</exclude>
<exclude>META-INF/*.RSA</exclude>
</excludes>
</filter>
</filters>
<transformers>
<transformer implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">
<resource>reference.conf</resource>
</transformer>
<transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
<mainClass>你的主类路径</mainClass> <!-- 如com.example.SparkApp -->
</transformer>
</transformers>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</project>
四、创建Scala/Java源文件
- 标记源代码目录
- 在 src/main 下新建 scala 或 java 目录,右键选择 Mark Directory as > Sources Root。
- 编写Spark应用(Scala示例)
scala
import org.apache.spark.sql.SparkSession
object SparkApp {
def main(args: Array[String]): Unit = {
// 创建SparkSession(本地模式)
val spark = SparkSession.builder()
.appName("IDEA Maven Spark Demo")
.master("local[*]") // 本地多线程运行
.getOrCreate()
// 简单示例:读取文本文件
val df = spark.read.text("src/main/resources/test.txt")
df.printSchema()
df.show()
spark.stop()
}
}
五、运行与调试
- 本地运行
- 直接点击IDEA中的运行按钮, master("local[*]") 会使用本地资源执行。
- 调试
- 设置断点,通过IDEA调试功能排查代码问题。
- 打包部署
- 执行 mvn clean package 生成JAR包(若使用 shade-plugin ,需确保主类配置正确),上传到Spark集群运行:
bash
spark-submit --class com.example.SparkApp --master yarn ./target/spark-demo-1.0-SNAPSHOT.jar
注意事项
- 依赖范围(Scope)
- provided 表示依赖仅在开发时使用,部署到集群时需确保集群已安装对应版本的Spark。
- Scala版本兼容
- Spark版本与Scala版本需匹配(如Spark 3.5.x对应Scala 2.12/2.13)。
- 日志配置
- 可在 src/main/resources 添加 log4j.properties 自定义日志级别。
- 集群部署
- 若集群使用HDFS,需将输入/输出路径改为HDFS路径(如 hdfs://nameservice1/input.txt )。