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

Spark集群调用SparkSession.getOrCreate()报JsonMappingException方法不存在

Spark Submit 抛出 NoSuchMethodError:JsonMappingException 构造方法缺失

执行spark-submit提交任务时,调用SparkSession.getOrCreate()方法触发如下异常,本地运行正常,仅Spark集群环境报错:

java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.JsonMappingException.<init>(Ljava/io/Closeable;Ljava/lang/String;)V
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule(JacksonModule.scala:61)
    at com.fasterxml.jackson.module.scala.JacksonModule.setupModule$(JacksonModule.scala:46)
    at com.fasterxml.jackson.module.scala.DefaultScalaModule.setupModule(DefaultScalaModule.scala:17)
    at com.fasterxml.jackson.databind.ObjectMapper.registerModule(ObjectMapper.java:718)
    at org.apache.spark.util.JsonProtocol$.<init>(JsonProtocol.scala:62)
    at org.apache.spark.util.JsonProtocol$.<clinit>(JsonProtocol.scala)
    at org.apache.spark.scheduler.EventLoggingListener.initEventLog(EventLoggingListener.scala:89)
    at org.apache.spark.scheduler.EventLoggingListener.start(EventLoggingListener.scala:84)
    at org.apache.spark.SparkContext.<init>(SparkContext.scala:610)
    at org.apache.spark.SparkContext$.getOrCreate(SparkContext.scala:2690)
    at org.apache.spark.sql.SparkSession$Builder.$anonfun$getOrCreate$2(SparkSession.scala:949)
    at scala.Option.getOrElse(Option.scala:189)
    at org.apache.spark.sql.SparkSession$Builder.getOrCreate(SparkSession.scala:943)
    at com.hiido.server.service.impl.SparkSqlJob.executing(SparkSqlJob.java:56)
    at com.hiido.server.service.impl.SparkSqlJob.main(SparkSqlJob.java:47)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.apache.spark.deploy.yarn.ApplicationMaster$$anon$2.run(ApplicationMaster.scala:737)

已确认环境版本:Spark核心版本spark_core_2.12-3.2.1,Jackson版本2.12.3,集群Spark版本3.2.1-bin-hadoop2.7,不认可版本冲突的说法,但目前无法解决问题。

项目pom.xml依赖配置:

<properties>
    <java.version>1.8</java.version>
    <geospark.version>1.2.0</geospark.version>
    <spark.compatible.verison>2.3</spark.compatible.verison>
    <!--<spark.version>2.3.4</spark.version>-->
    <spark.version>3.2.1</spark.version>
    <hadoop.version>2.7.2</hadoop.version>
    <geotools.version>19.0</geotools.version>
</properties>
<dependencies>
    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter</artifactId>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-test</artifactId>
        <scope>test</scope>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-web</artifactId>
    </dependency>


    <!-- https://mvnrepository.com/artifact/io.netty/netty-all -->
    <dependency>
        <groupId>io.netty</groupId>
        <artifactId>netty-all</artifactId>
        <version>4.1.68.Final</version>
    </dependency>


    <!--        <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.4.4</version>
            </dependency>-->
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId> jackson-annotations</artifactId>
        <version>2.12.3</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId> jackson-core</artifactId>
        <version>2.12.3</version>
        <scope>compile</scope>
    </dependency>
    <dependency>
        <groupId>com.fasterxml.jackson.core</groupId>
        <artifactId>jackson-databind</artifactId>
        <version>2.12.3</version>
        <scope>compile</scope>
    </dependency>

    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>commons-compiler</artifactId>
        <version>3.0.8</version>
    </dependency>
    <dependency>
        <groupId>org.scala-lang</groupId>
        <artifactId>scala-library</artifactId>
        <version>2.12.15</version>
    </dependency>
    <!-- geospark -->
    <dependency>
        <groupId>org.datasyslab</groupId>
        <artifactId>geospark</artifactId>
        <version>${geospark.version}</version>
    </dependency>
    <dependency>
        <groupId>org.datasyslab</groupId>
        <artifactId>geospark-sql_${spark.compatible.verison}</artifactId>
        <version>${geospark.version}</version>
    </dependency>
    <dependency>
        <groupId>org.datasyslab</groupId>
        <artifactId>geospark-viz_${spark.compatible.verison}</artifactId>
        <version>${geospark.version}</version>
    </dependency>
    <!-- geospark -->
    <dependency>
        <groupId>org.apache.sedona</groupId>
        <artifactId>sedona-core-3.0_2.12</artifactId>
        <version>1.1.1-incubating</version>
    </dependency>
    <dependency>
        <groupId>org.apache.sedona</groupId>
        <artifactId>sedona-sql-3.0_2.12</artifactId>
        <version>1.1.1-incubating</version>
    </dependency>
    <dependency>
        <groupId>org.apache.sedona</groupId>
        <artifactId>sedona-viz-3.0_2.12</artifactId>
        <version>1.1.1-incubating</version>
    </dependency>


    <dependency>
        <groupId>org.datasyslab</groupId>
        <artifactId>sernetcdf</artifactId>
        <version>0.1.0</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-core_2.12</artifactId>
<!--            <version>2.3.4</version>-->
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-streaming_2.12</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-sql_2.12</artifactId>
        <version>3.2.1</version>
        <!--<scope>provided</scope>-->
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-hive_2.12</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.spark</groupId>
        <artifactId>spark-mllib_2.12</artifactId>
        <version>3.2.1</version>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>${hadoop.version}</version>
        <scope>${dependency.scope}</scope>
    </dependency>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>${hadoop.version}</version>
        <scope>${dependency.scope}</scope>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.javacsv</groupId>
        <artifactId>javacsv</artifactId>
        <version>2.0</version>
    </dependency>
    <dependency>
        <groupId>org.postgresql</groupId>
        <artifactId>postgresql</artifactId>
        <version>42.2.5</version>
    </dependency>
    <dependency>
        <groupId>org.codehaus.janino</groupId>
        <artifactId>janino</artifactId>
        <version>3.0.8</version>
    </dependency>


    <dependency>
        <groupId>org.geotools</groupId>
        <artifactId>gt-grid</artifactId>
        <version>${geotools.version}</version>
    </dependency>

    <!-- https://mvnrepository.com/artifact/org.locationtech.spatial4j/spatial4j -->
    <dependency>
        <groupId>org.locationtech.spatial4j</groupId>
        <artifactId>spatial4j</artifactId>
        <version>0.8</version>
    </dependency>
    <!-- JTS is essentially only used for polygons. -->
    <!-- https://mvnrepository.com/artifact/org.locationtech.jts/jts-core -->
    <dependency>
        <groupId>org.locationtech.jts</groupId>
        <artifactId>jts-core</artifactId>
        <version>1.18.1</version>
    </dependency>
</dependencies>

解决方案

1. 标记Spark相关依赖为provided

集群环境已预装Spark依赖,打包时无需将其打入Jar包,避免依赖版本冲突。修改pom.xml中Spark相关依赖的scope:

<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-core_2.12</artifactId>
    <version>3.2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-streaming_2.12</artifactId>
    <version>3.2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-sql_2.12</artifactId>
    <version>3.2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-hive_2.12</artifactId>
    <version>3.2.1</version>
    <scope>provided</scope>
</dependency>
<dependency>
    <groupId>org.apache.spark</groupId>
    <artifactId>spark-mllib_2.12</artifactId>
    <version>3.2.1</version>
    <scope>provided</scope>
</dependency>

2. 强制统一Jackson版本

通过dependencyManagement锁定Jackson三个核心包的版本,确保所有依赖(包括Spring Boot、GeoSpark等)都使用指定的2.12.3版本:

<dependencyManagement>
    <dependencies>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
            <version>2.12.3</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.12.3</version>
        </dependency>
    </dependencies>
</dependencyManagement>

3. 排查并排除冲突依赖

执行mvn dependency:tree命令查看依赖树,找出引入旧版本Jackson的依赖,用exclusions排除:
例如,如果Spring Boot引入了其他版本的Jackson,可在spring-boot-starter依赖中排除:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
    <exclusions>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-annotations</artifactId>
        </exclusion>
        <exclusion>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
        </exclusion>
    </exclusions>
</dependency>

4. 使用Shade插件重命名Jackson包

如果上述方法无效,可通过maven-shade-plugin将项目中的Jackson包重命名,彻底隔离集群环境的Jackson:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>3.2.4</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <relocations>
                            <relocation>
                                <pattern>com.fasterxml.jackson</pattern>
                                <shadedPattern>com.myproject.shaded.fasterxml.jackson</shadedPattern>
                            </relocation>
                        </relocations>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

内容的提问来源于stack exchange,提问作者haobo chu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 01:05:46