You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SparkSession初始化抛出ExceptionInInitializerError问题求助

解决SparkSession.getOrCreate()触发的ExceptionInInitializerError问题

看起来你遇到的这个错误根源是Apache Commons Lang3的版本兼容问题,再加上依赖配置的小失误导致的。让我一步步帮你解决:

核心原因分析

从堆栈信息看,NullPointerException出现在org.apache.commons.lang3.SystemUtils.isJavaVersionAtLeast方法里,这说明SystemUtils类无法正确读取Java版本信息,通常是因为项目中缺少正确版本的commons-lang3依赖,或者依赖版本和Spark 3.0.0所需的版本不匹配。另外,你用的是Structured Streaming,但引入了传统DStream的Spark Streaming依赖,这也可能引发类冲突。

具体修复步骤

1. 添加正确版本的commons-lang3依赖

Spark 3.0.0依赖的commons-lang3版本是3.8.1,直接在你的pom.xml中加入这个依赖:

<dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-lang3</artifactId>
    <version>3.8.1</version>
</dependency>

2. 修正Structured Streaming的依赖配置

你当前引入的是传统Spark Streaming(DStream)的Kafka连接器,但你要运行的是Structured Streaming任务,需要替换为对应的SQL版Kafka依赖:

  • 移除以下两个依赖:
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.12</artifactId>
    <version>${spark.version}</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming-kafka-0-10_2.12</artifactId>
    <version>${spark.version}</version>
</dependency>
  • 添加Structured Streaming的Kafka依赖:
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql-kafka-0-10_2.12</artifactId>
    <version>${spark.version}</version>
</dependency>

3. 优化Maven Shade插件配置(可选但推荐)

为了避免依赖冲突,在shade插件中添加类重定位配置,确保commons-lang3的类不会和其他依赖冲突:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>${mvn-shade.version}</version>
    <executions>
        <execution>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"/>
                </transformers>
                <!-- 添加类重定位 -->
                <relocations>
                    <relocation>
                        <pattern>org.apache.commons.lang3</pattern>
                        <shadedPattern>shaded.org.apache.commons.lang3</shadedPattern>
                    </relocation>
                </relocations>
            </configuration>
        </execution>
    </executions>
</plugin>

4. 验证Java环境

最后确认你的运行环境确实是Java 11,执行以下命令检查:

java -version

确保输出的版本号和你pom中配置的maven.compiler.source/target一致。

完成这些步骤后,重新打包运行你的任务,应该就能正常创建SparkSession了。

内容的提问来源于stack exchange,提问作者Matthias Seiler

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 17:42:53