3. 开发环境搭建:JDK、Scala、Spark、Maven安装配置、IDEA插件、本地模式与集群模式

本章将指导你完成基于Spark的贷后预警实时计算所需的全部开发环境搭建。一个稳定、版本匹配的开发环境是后续编码与调试的基础。我们将按照“基础依赖 → 核心框架 → 构建工具 → IDE集成 → 运行模式”的路径逐步配置。

3.1 环境版本选型与兼容性矩阵

Spark生态各组件版本之间存在严格的兼容性要求。下表列出了本教程推荐的版本组合,请严格遵循以避免运行时类冲突或API不兼容问题。

组件 推荐版本 说明
JDK 1.8.0_202 (8u202) Spark 3.x 官方推荐;避免使用更高版本以减少兼容风险
Scala 2.12.17 Spark 3.3.x 默认编译版本;与Spark二进制包一致
Spark 3.3.2 (Hadoop 2.7) 稳定版,支持Kafka 0.10+,适合贷后实时流处理
Maven 3.8.6 构建管理;与Scala插件兼容性好
IntelliJ IDEA 2023.2+ (Ultimate) 支持Scala插件、Spark应用调试
版本陷阱提示: 不要使用JDK 11+搭配Spark 3.3.x,虽然可以运行,但部分Scala反射API在JDK 11下会抛出模块化访问警告,影响贷后预警作业的稳定性。始终优先使用JDK 8。

3.2 JDK 安装与配置

JDK是Spark运行的基础。安装后必须正确设置 JAVA_HOME 环境变量。

  1. 下载:从Oracle Archive或Adoptium获取JDK 8u202,选择Windows x64或Linux x64版本。
  2. 安装路径:建议安装到无空格的路径,例如 C:\Java\jdk1.8.0_202(Windows)或 /usr/lib/jvm/java-8-openjdk-amd64(Linux)。
  3. 环境变量配置:
    # Windows (系统变量)
    JAVA_HOME = C:\Java\jdk1.8.0_202
    PATH 追加 = %JAVA_HOME%\bin
    
    # Linux (~/.bashrc 或 /etc/profile)
    export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
    export PATH=$JAVA_HOME/bin:$PATH
  4. 验证:打开终端执行 java -version,输出应包含 1.8.0_202。

3.3 Scala 安装与配置

Spark虽然提供了Java和Python API,但Scala是其原生语言,贷后预警的流处理逻辑使用Scala编写能获得最佳性能和最全的API支持。

  1. 下载:从Scala官网下载 scala-2.12.17.zip 或 .tgz 包。
  2. 解压:解压到 C:\Scala\scala-2.12.17 或 /opt/scala-2.12.17。
  3. 环境变量:
    SCALA_HOME = C:\Scala\scala-2.12.17
    PATH 追加 = %SCALA_HOME%\bin
  4. 验证:执行 scala -version,确认显示 Scala code runner version 2.12.17。

3.4 Spark 安装与目录结构

Spark采用预编译二进制包安装,无需从源码编译。下载时选择 spark-3.3.2-bin-hadoop2.7.tgz。

  1. 解压:解压到 C:\Spark\spark-3.3.2-bin-hadoop2.7 或 /opt/spark。
  2. 设置 SPARK_HOME:
    SPARK_HOME = C:\Spark\spark-3.3.2-bin-hadoop2.7
    PATH 追加 = %SPARK_HOME%\bin
  3. 验证:执行 spark-shell,应进入Scala交互式环境并显示Spark版本信息。

Spark目录结构的关键子目录说明:

目录/文件 用途
bin/ 启动脚本(spark-submit, spark-shell, pyspark)
conf/ 配置文件模板(spark-defaults.conf, log4j.properties)
jars/ Spark核心及依赖JAR包
examples/ 官方示例代码,可参考学习
sbin/ 集群启停脚本(start-all.sh, stop-all.sh)

3.5 Maven 安装与配置

Maven用于管理贷后预警项目的依赖和构建。配置时需指定本地仓库路径和阿里云镜像以加速依赖下载。

  1. 下载:从Maven官网下载 apache-maven-3.8.6-bin.zip。
  2. 解压:解压到 C:\Maven\apache-maven-3.8.6。
  3. 环境变量:
    MAVEN_HOME = C:\Maven\apache-maven-3.8.6
    PATH 追加 = %MAVEN_HOME%\bin
  4. 配置 settings.xml(位于 %MAVEN_HOME%\conf\):
    <settings>
      <localRepository>C:/Users/你的用户名/.m2/repository</localRepository>
      <mirrors>
        <mirror>
          <id>aliyunmaven</id>
          <mirrorOf>central</mirrorOf>
          <name>阿里云公共仓库</name>
          <url>https://maven.aliyun.com/repository/public</url>
        </mirror>
      </mirrors>
    </settings>
  5. 验证:执行 mvn -version,确认Maven版本和Java版本。

3.6 IntelliJ IDEA 插件安装

IDEA是开发Spark应用的首选IDE。需要安装以下关键插件:

  • Scala插件:支持Scala语法高亮、代码补全、编译运行。
  • Maven Helper:分析依赖冲突,解决贷后预警项目中Spark与Kafka客户端的JAR包冲突。
  • Rainbow Brackets:Scala函数式编程中括号嵌套较多,该插件可显著提升代码可读性。

安装步骤:File → Settings → Plugins → Marketplace,搜索并安装上述插件,重启IDEA。

3.7 本地模式与集群模式对比

Spark支持多种运行模式。在贷后预警开发的不同阶段,我们会切换使用本地模式和集群模式。

开发阶段建议: 在本地模式下编写和调试流处理逻辑,使用 local[*] 模拟并行度;在测试和上线阶段切换到YARN集群模式,利用集群资源处理真实贷后数据量。

下图展示了本地模式与集群模式的核心架构差异:

本地模式 vs 集群模式 架构对比 本地模式 (local[*]) Driver + Executor (同一JVM) Task 1 Task 2 Task 3 Task 4 所有任务在单机多线程中执行 适合开发调试、小数据量验证 集群模式 (YARN) Driver (独立进程) Executor 1 Executor 2 Executor 3 Executor 4 Driver与Executor分布在多台机器 适合生产环境、大规模贷后数据

3.8 本地模式快速验证

完成上述安装后,通过一个简单的Spark作业验证环境是否正常。在IDEA中创建Maven项目,添加以下依赖:

<dependencies>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.12</artifactId>
        <version>3.3.2</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.12</artifactId>
        <version>3.3.2</version>
    </dependency>
</dependencies>

编写一个简单的WordCount程序,以本地模式运行:

import org.apache.spark.sql.SparkSession

object LocalModeTest {
  def main(args: Array[String]): Unit = {
    val spark = SparkSession.builder()
      .appName("LocalModeTest")
      .master("local[*]")  // 本地模式,使用所有可用核心
      .getOrCreate()

    val data = Seq("贷后预警", "实时计算", "Spark", "贷后预警")
    val df = spark.createDataFrame(data.map(Tuple1(_))).toDF("word")
    df.createOrReplaceTempView("words")

    val result = spark.sql("SELECT word, COUNT(*) AS cnt FROM words GROUP BY word")
    result.show()

    spark.stop()
  }
}

运行后控制台应输出分组统计结果,表明环境搭建成功。

3.9 集群模式配置要点

当贷后预警作业需要处理真实业务数据时,需切换到YARN集群模式。配置步骤如下:

  1. 配置Hadoop:确保 HADOOP_CONF_DIR 指向包含 core-site.xml 和 yarn-site.xml 的目录。
  2. 配置Spark:复制 spark-env.sh.template 为 spark-env.sh,添加:
    export HADOOP_CONF_DIR=/etc/hadoop/conf
    export SPARK_MASTER_HOST=your-master-node
  3. 提交作业:使用 spark-submit 指定YARN模式:
    spark-submit \
      --class com.example.LoanWarningJob \
      --master yarn \
      --deploy-mode cluster \
      --executor-memory 4g \
      --num-executors 10 \
      target/loan-warning-1.0-SNAPSHOT.jar
贷后预警调优提示: 在集群模式下,建议将 spark.sql.shuffle.partitions 设置为 executor数量 × 核心数 × 2,以充分利用并行度处理贷后流水数据。

3.10 环境验证清单

完成所有配置后,使用下表逐项检查,确保环境就绪:

检查项 验证命令 预期结果
JDK java -version 1.8.0_202
Scala scala -version 2.12.17
Spark spark-shell --version 3.3.2
Maven mvn -version 3.8.6
本地模式 运行LocalModeTest 输出分组统计结果
集群模式 spark-submit --master yarn --version 显示Spark版本且无连接错误