从Hive导入guava版本冲突,重新打包exchange
环境 nebula 版本:3.2.0 hadoop 3.1.1 spark 2.4.3 hive 3.1.0 scala 2.11.12 exchange nebula-exchange_spark_2.4-3.0.0.jar
遇到问题
- NoSuchMethodError: com.google.common.net.HostAndPort.getHostText()
- NoSuchMethodError: com.google.common.base.Preconditions.checkArgument()
- java.lang.NoClassDefFoundError: org/apache/commons/pool2/PooledObjectFactory
原因
- exchange对guava-14.0强依赖,而spark集群使用的是guava-28.0-jre,guava-16以后不再向下兼容.
- 导致exchange和spark集群的guava互斥:
- 使用guava-28.0-jre 那么exchange会NoSuchMethodError: com.google.common.net.HostAndPort.getHostText
- 使用guava-14.0 那么spark集群会NoSuchMethodError: com.google.common.base.Preconditions.checkArgument
- pool2.PooledObjectFactory 是client启动连接池, SPARK_HOME/jars下面没有2版本的,只有1版本的, 且exchange里没有对应依赖(exchange添加依赖commons-pool2-2.4.2 commons-dbcp2-2.1.1,或者SPARK_HOME/jars下面添加均可)
在linux环境下打包!!! (windows下exchange打包会: scala-maven-plugin:4.4.0:compile: java.lang.NoSuchMethodError: org.fusesource.jansi.AnsiConsole.wrapOutputStream(Ljava/io/OutputStream;)Ljava/io/Output Stream; )
参考 特殊依赖:neo4j-spark-connector-2.4.5-M1.jar 代码地址
特别注意
<dependency>
<groupId>com.vesoft</groupId>
<artifactId>client</artifactId>
<version>3.0.0</version>
</dependency>
- 安装自定义guava
cd guava-udf
mvn clean install -Dmaven.test.skip=true
- 安装client(可选)
cd client-java-udf
mvn clean install -Dmaven.test.skip=true
- 安装cexchange(注意: com.vesoft.client 版本按需调整)
cd exchange-udf
mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-exchange_spark_2.2 -am -Pscala-2.11 -Pspark-2.2
mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-exchange_spark_2.4 -am -Pscala-2.11 -Pspark-2.4
mvn clean package -Dmaven.test.skip=true -Dgpg.skip -Dmaven.javadoc.skip=true -pl nebula-exchange_spark_3.0 -am -Pscala-2.12 -Pspark-3.0
|