从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;
)
参考
特殊依赖: