4. 开发环境搭建:JDK、Scala、Spark集群、Maven/Gradle配置、IDE设置
贷后预警系统对实时性和稳定性要求极高,开发环境的版本一致性是避免“本地能跑、集群报错”的第一道防线。本节将按依赖顺序,逐一搭建 JDK、Scala、Spark 集群、构建工具及 IDE,并给出经过生产验证的版本组合。
4.1 版本选型与兼容性矩阵
Spark Streaming 与 Scala、JDK 存在严格的二进制兼容关系。下表列出 Spark 3.x 主流版本的推荐配套,请根据实际集群版本选择其中一行。
| Spark 版本 | 推荐 JDK | 推荐 Scala | 构建工具最低版本 | 备注 |
|---|---|---|---|---|
| 3.2.x | JDK 8u201+ / JDK 11 | 2.12.15+ | Maven 3.6.3 / Gradle 7.3 | 稳定,贷后项目常用 |
| 3.3.x | JDK 8u301+ / JDK 11 / JDK 17 | 2.12.17+ / 2.13.8+ | Maven 3.8.4 / Gradle 7.5 | 支持 Scala 2.13,性能优化 |
| 3.4.x | JDK 11 / JDK 17 | 2.12.18+ / 2.13.11+ | Maven 3.9.0 / Gradle 8.0 | 最新特性,建议新项目使用 |
版本陷阱:Spark 3.2 之前使用 Scala 2.11,但 2.11 已停止维护且存在安全漏洞。贷后预警涉及客户资金数据,务必使用 Scala 2.12 以上版本。JDK 8 请确保更新到 201 以上,否则 Kryo 序列化可能触发 JVM 崩溃。
4.2 JDK 安装与配置
以 JDK 11(LTS)为例,所有节点需保持相同大版本。
- 下载与解压:从 Oracle 或 Adoptium 获取
jdk-11.0.20_linux-x64_bin.tar.gz,解压至/usr/local/jdk-11.0.20。 - 配置环境变量:编辑
/etc/profile或~/.bashrc,添加:
export JAVA_HOME=/usr/local/jdk-11.0.20
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
- 验证:执行
java -version,输出应包含OpenJDK 64-Bit Server VM (build 11.0.20+8, mixed mode)。
生产建议:贷后集群建议统一使用
alternatives 管理 JDK 版本,避免多版本冲突。在 /etc/alternatives/java 中设置软链接,确保所有服务用户都能找到正确的 JDK。
4.3 Scala 安装
Spark 自身已捆绑 Scala 运行时库,但开发机仍需安装 Scala 编译器用于本地编译和测试。
- 下载:从 Scala 官网获取
scala-2.12.18.tgz,解压至/opt/scala-2.12.18。 - 环境变量:
export SCALA_HOME=/opt/scala-2.12.18
export PATH=$SCALA_HOME/bin:$PATH
- 验证:
scala -version应显示Scala code runner version 2.12.18。
关键点:Spark 3.3+ 支持 Scala 2.13,但贷后预警中常用的 Kafka 客户端和 HBase 连接器在 2.13 下可能缺少预编译包。除非团队有编译能力,否则建议生产环境统一使用 Scala 2.12。
4.4 Spark 集群搭建(Standalone 模式)
贷后预警开发阶段推荐使用 Standalone 模式,部署简单且能模拟资源调度。以下为 3 节点集群(1 Master + 2 Worker)的搭建步骤。
- 下载 Spark:
spark-3.3.2-bin-hadoop3.tgz,解压至/opt/spark。 - 配置
spark-env.sh:
export JAVA_HOME=/usr/local/jdk-11.0.20
export SPARK_MASTER_HOST=192.168.1.10
export SPARK_MASTER_PORT=7077
export SPARK_WORKER_CORES=4
export SPARK_WORKER_MEMORY=8g
export SPARK_DAEMON_MEMORY=2g
export SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=/tmp/spark-events"
- 配置
workers:在conf/workers中列出 Worker 节点 IP:
192.168.1.11
192.168.1.12
- 启动集群:
cd /opt/spark/sbin
./start-master.sh
./start-workers.sh
- 验证:浏览器访问
http://192.168.1.10:8080,应看到 1 个 Master 和 2 个 Worker 状态为 ALIVE。
4.5 Maven / Gradle 配置
贷后预警项目通常为多模块工程,包含 spark-streaming、risk-engine、alert-dispatch 等子模块。以下分别给出 Maven 和 Gradle 的核心配置。
4.5.1 Maven pom.xml 核心依赖
<properties>
<spark.version>3.3.2</spark.version>
<scala.version>2.12.18</scala.version>
<scala.binary.version>2.12</scala.binary.version>
</properties>
<dependencies>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-sql_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.spark</groupId>
<artifactId>spark-streaming-kafka-0-10_${scala.binary.version}</artifactId>
<version>${spark.version}</version>
</dependency>
</dependencies>
provided 作用域:Spark 和 Scala 库在集群中已存在,打包时标记为
provided 可避免 jar 冲突和包体积过大。Kafka 连接器则需打包进 fat-jar。
4.5.2 Gradle build.gradle 核心配置
plugins {
id 'scala'
id 'com.github.johnrengelman.shadow' version '7.1.2'
}
repositories {
mavenCentral()
}
dependencies {
implementation "org.apache.spark:spark-streaming_2.12:3.3.2"
implementation "org.apache.spark:spark-sql_2.12:3.3.2"
implementation "org.apache.spark:spark-streaming-kafka-0-10_2.12:3.3.2"
}
shadowJar {
zip64 true
mergeServiceFiles()
exclude 'META-INF/*.RSA', 'META-INF/*.SF', 'META-INF/*.DSA'
}
4.6 IDE 设置(IntelliJ IDEA)
IntelliJ IDEA 是 Scala/Spark 开发的事实标准 IDE。以下为关键配置步骤。
| 步骤 | 操作 | 说明 |
|---|---|---|
| 1 | 安装 Scala 插件 | File → Settings → Plugins → 搜索 Scala → 安装 |
| 2 | 配置 JDK | File → Project Structure → SDK → 添加 JDK 11 |
| 3 | 配置 Scala SDK | File → Project Structure → Global Libraries → 添加 Scala 2.12.18 |
| 4 | 设置编码 | File → Settings → File Encodings → 全部设为 UTF-8 |
| 5 | 安装 Save Actions 插件 | 自动格式化代码,避免提交时出现格式冲突 |
| 6 | 配置 VM 参数 | Help → Edit Custom VM Options → 增加 -Xmx2048m |
4.7 环境验证清单
完成上述配置后,执行以下命令确认环境就绪:
# 1. JDK 版本
java -version
# 2. Scala 版本
scala -version
# 3. Spark 集群状态
curl http://192.168.1.10:8080
# 4. 提交测试任务(本地模式)
spark-submit --master local[2] --class org.apache.spark.examples.SparkPi \
/opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 10
# 5. 提交测试任务(集群模式)
spark-submit --master spark://192.168.1.10:7077 \
--class org.apache.spark.examples.SparkPi \
/opt/spark/examples/jars/spark-examples_2.12-3.3.2.jar 10
贷后预警开发环境检查点:
- 所有节点 JDK 版本一致(避免序列化异常)
- Spark 日志目录
- 开发机与集群节点网络互通(telnet 192.168.1.10 7077 确认)
- IDE 中 Scala SDK 与集群 Scala 版本完全一致
- 所有节点 JDK 版本一致(避免序列化异常)
- Spark 日志目录
/tmp/spark-events 已创建(用于 History Server)- 开发机与集群节点网络互通(telnet 192.168.1.10 7077 确认)
- IDE 中 Scala SDK 与集群 Scala 版本完全一致