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的支持。

Hive UDF IP解析(一):依赖包兼容性问题的更多相关文章

  1. Hive UDF IP解析(二):使用geoip2数据库自定义UDF

    开发中经常会碰到将IP转为地域的问题,所以以下记录Hive中自定义UDF来解析IP. 使用到的地域库位maxmind公司的geoIP2数据库,分为免费版GeoLite2-City.mmdb和收费版Ge ...

  2. Caffe实战三(依赖包解析及环境配置)

    前面的文章使用的软件环境是开始时通过apt-get命令所安装的,本文将通过编译源码的方式重新配置一个可迁移的软件环境.(参考:<深度学习 21天实战Caffe> 第五天 Caffe依赖包解 ...

  3. caffe 的架构设计及其依赖包的解析

    Caffe | Deep Learning Framework Web Classification Demos caffe(全称,Convolution Architecture For Featu ...

  4. Hive UDF初探

    1. 引言 在前一篇中,解决了Hive表中复杂数据结构平铺化以导入Kylin的问题,但是平铺之后计算广告日志的曝光PV是翻倍的,因为一个用户对应于多个标签.所以,为了计算曝光PV,我们得另外创建视图. ...

  5. IP工具类-自己动手做个ip解析器

    IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:

  6. hive UDF函数

    —虽然Hive提供了很多函数,但是有些还是难以满足我们的需求.因此Hive提供了自定义函数开发 —自定义函数包括三种UDF.UADF.UDTF —UDF(User-Defined-Function) ...

  7. Hive UDF开发-简介

    Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. Hive的UDF开发只需要重构UDF类的evaluate函数即可.例 ...

  8. Hive UDF,就这

    摘要:Hive UDF是什么?有什么用?怎么用?什么原理?本文从UDF使用入手,简要介绍相关源码,UDF从零开始. 本文分享自华为云社区<Hive UDF,就这>,作者:汤忒撒. Hive ...

  9. 【转】Mapreduce部署与第三方依赖包管理

    Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错.本文介绍几种常用的配置方式: 1. HADOOP_ ...

随机推荐

  1. HDUOJ----4502吉哥系列故事——临时工计划

    吉哥系列故事——临时工计划 Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  2. Web前端开发笔试&面试_01(mi:)

    —— (al_me16041719002000) begin—— 1.(单选)下面哪个方法是String对象和Array对象都有的? A.splice B.split C.replace D.conc ...

  3. .net/c# RabbitMQ 连接断开处理-断线重连(转载)

    Rabbitmq 官方给的NET consumer示例代码如下,但使用过程,会遇到connection断开的问题,一旦断开,这个代码就会报错,就会导致消费者或者生产者挂掉. 下图是生产者发送消息,我手 ...

  4. python学习笔记——mongodb数据库

    1 概述 1.1 文件管理阶段 优点:可以长期保存 能存储大量数据 缺点:没有结构化的组织 查找不方便 数据容易冗余 1.2 数据库管理阶段 有文件存储的优点,同时解决了文件存储的问题 缺点 : 操作 ...

  5. http请求No peer certificate的解决方法

    不少同学在做HTTP请求新浪授权或新浪数据的时候会出现 javax.net.ssl.SSLPeerUnverifiedException: No peer certificate的异常.现给出解决方法 ...

  6. C# GridView 给某行或某列绑定点击事件和鼠标事件

    protected void GridViewEx1_RowDataBound(object sender, GridViewRowEventArgs e) { if (e.Row.RowType = ...

  7. @RequestBody 处理类型 和 对象 和 json 相互转换

    1 @RequestBody 处理类型 在项目中经常看到controller 中有 @RequestBody 字样,他到底有什么作用? 一般使用表单提交数据时不需要使用@RequestBody 即可自 ...

  8. angular.js ng-repeat动态插入删除dom节点

    既然上面提到 angular.js 下无需用户直接操作dom ,而是在编译间断 dom 与 控制层model 实现了双向绑定,一方做出改变,另一方就会立即改变,那问题来了,我想插入一个文本框和按钮,并 ...

  9. 斯坦福IOS开发第五课(第二部分)

    转载请注明出处 http://blog.csdn.net/pony_maggie/article/details/27845257 作者:小马 五 代码演示样例 上面讲到的知识点在这个演示样例都有涉及 ...

  10. MySQL PLSQL Demo - 003.静态游标

    drop procedure if exists p_hello_world; create procedure p_hello_world() begin declare id integer; ) ...