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

使用Spark-Nebula-Connector时遭遇Guava版本冲突求解决方案

解决Spark与NebulaGraph Connector的Guava版本冲突问题

针对Spark(依赖Guava 27.0-jre)和nebula-java客户端(依赖Guava 14)的版本冲突问题,以下是几种可行的解决方法:

1. 使用Shade/Shadow插件重命名nebula依赖的Guava包

这是最可靠的解决方案,通过构建工具将nebula-java依赖的Guava包重命名为独立命名空间,彻底避免与Spark的Guava版本冲突。

Maven配置示例

修改项目的pom.xml,添加Maven Shade插件并配置包重定向规则:

<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>
                            <!-- 将nebula依赖的Guava包重命名到独立路径 -->
                            <relocation>
                                <pattern>com.google.common</pattern>
                                <shadedPattern>com.google.common.nebula</shadedPattern>
                            </relocation>
                        </relocations>
                        <!-- 配置主类(如果打包为可执行JAR) -->
                        <transformers>
                            <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>your.main.class.path</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

Gradle配置示例

使用Gradle Shadow插件,在build.gradle中添加:

plugins {
    id 'com.github.johnrengelman.shadow' version '7.1.2'
}

shadowJar {
    // 重命名Guava包至独立命名空间
    relocate 'com.google.common', 'com.google.common.nebula'
    // 指定主类(若需生成可执行JAR)
    manifest {
        attributes 'Main-Class': 'your.main.class.path'
    }
}

执行gradle shadowJar生成包含重命名依赖的JAR包,提交Spark任务时使用该JAR即可。

2. 调整Spark任务提交时的依赖隔离策略(临时方案)

若无法修改项目构建配置,可尝试在提交Spark任务时通过参数控制依赖加载顺序,但此方法稳定性较低:

spark-submit \
  --class your.main.class \
  --jars path/to/shaded-nebula-connector.jar \
  --driver-class-path path/to/shaded-nebula-connector.jar:path/to/guava-27.0-jre.jar \
  your-application.jar

注意:不建议直接排除Spark默认的Guava依赖,可能引发其他组件的兼容性问题。

3. 升级NebulaGraph及Connector版本(若业务允许)

检查nebula-java的后续版本(如v3.5+),部分新版本已将Guava依赖升级至21.0及以上,与Spark 2.4的Guava 27兼容性更好。如果业务允许升级NebulaGraph集群至对应版本,可直接使用新版本的connector解决冲突。

内容的提问来源于stack exchange,提问作者Lisa Liu

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 08:15:54