Java依賴環境:
<dependency> <groupId>org.apache.hive</groupId> <artifactId>hive-exec</artifactId> <version>2.3.0</version> </dependency> <dependency> <groupId>com.maxmind.db</groupId> <artifactId>maxmind-db</artifactId> <version>1.2.2</version> </dependency> <dependency> <groupId>com.maxmind.geoip2</groupId> <artifactId>geoip2</artifactId> <version>2.11.0</version> </dependency>
根據官方提供的API,開發測試時,出現以下兼容性問題:
GeoIP2 java API : http://maxmind.github.io/GeoIP2-java/
java.lang.NoSuchMethodError: com.fasterxml.jackson.databind.node.ArrayNode.<init>(Lcom/fasterxml/jackson/databind/node/JsonNodeFactory;Ljava/util/List;)V at com.maxmind.db.Decoder.decodeArray(Decoder.java:272) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Decoder.decodeByType(Decoder.java:156) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Decoder.decode(Decoder.java:147) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Decoder.decodeMap(Decoder.java:281) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Decoder.decodeByType(Decoder.java:154) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Decoder.decode(Decoder.java:147) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Decoder.decode(Decoder.java:87) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Reader.<init>(Reader.java:132) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.db.Reader.<init>(Reader.java:116) ~[maxmind-db-1.2.2.jar:?] at com.maxmind.geoip2.DatabaseReader.<init>(DatabaseReader.java:66) ~[geoip2-2.11.0.jar:2.11.0] at com.maxmind.geoip2.DatabaseReader.<init>(DatabaseReader.java:54) ~[geoip2-2.11.0.jar:2.11.0] at com.maxmind.geoip2.DatabaseReader$Builder.build(DatabaseReader.java:160) ~[geoip2-2.11.0.jar:2.11.0]
根據錯誤信息,定位到fasterxml的兼容出現故障,最后追綜到hive2.3.0版本中avatica-1.8.0.jar居然包含了com.fasterxml.jackson包。
對應的jackson-datamind的版本為2.6.3,而我們要用要的geoip2依賴jackson-datamind的版本為2.9.3,這兩個版本存在上面報錯信息地方的方法的不同。
找到了這個梗,下面考慮解決方案:
方案一: 修改geoip2的源程序,從開始引用的類com.maxmind.geoip2.DatabaseReader.class
一直到報錯的這個方法的類全部重命名調用,並手工添加這個未找到的方法。然后打包編譯,這樣就繞過了依賴包的版本問題。
方案二: 經過測試沒通過。
本想直接替換hive中avatica-1.8.0.jar包,升級為新版本,但是存在其他依賴,無法替換,所以只有第一種方法。
替換hive的lib庫中avatica-1.8.0.jar,使用最新的avatica-1.11.0.jar
在新版本的avaitca-1.11.0.jar版本中,我們找不到com.fasterxml.jackson這個文件夾了,並且依賴的POM中顯示依賴的是2.9.4版本。
這樣就不會引起多個相同的類的沖突了。
但是也許會有一些潛在的風險,就是hive本身的環境是否對新版的avatica-1.11.0.jar的支持。