Hive UDF IP解析(一):依赖包兼容性问题
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解析(一):依赖包兼容性问题的更多相关文章
- Hive UDF IP解析(二):使用geoip2数据库自定义UDF
开发中经常会碰到将IP转为地域的问题,所以以下记录Hive中自定义UDF来解析IP. 使用到的地域库位maxmind公司的geoIP2数据库,分为免费版GeoLite2-City.mmdb和收费版Ge ...
- Caffe实战三(依赖包解析及环境配置)
前面的文章使用的软件环境是开始时通过apt-get命令所安装的,本文将通过编译源码的方式重新配置一个可迁移的软件环境.(参考:<深度学习 21天实战Caffe> 第五天 Caffe依赖包解 ...
- caffe 的架构设计及其依赖包的解析
Caffe | Deep Learning Framework Web Classification Demos caffe(全称,Convolution Architecture For Featu ...
- Hive UDF初探
1. 引言 在前一篇中,解决了Hive表中复杂数据结构平铺化以导入Kylin的问题,但是平铺之后计算广告日志的曝光PV是翻倍的,因为一个用户对应于多个标签.所以,为了计算曝光PV,我们得另外创建视图. ...
- IP工具类-自己动手做个ip解析器
IP工具类-自己动手做个ip解析器 一.资料准备 导入依赖包:
- hive UDF函数
虽然Hive提供了很多函数,但是有些还是难以满足我们的需求.因此Hive提供了自定义函数开发 自定义函数包括三种UDF.UADF.UDTF UDF(User-Defined-Function) ...
- Hive UDF开发-简介
Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以. Hive的UDF开发只需要重构UDF类的evaluate函数即可.例 ...
- Hive UDF,就这
摘要:Hive UDF是什么?有什么用?怎么用?什么原理?本文从UDF使用入手,简要介绍相关源码,UDF从零开始. 本文分享自华为云社区<Hive UDF,就这>,作者:汤忒撒. Hive ...
- 【转】Mapreduce部署与第三方依赖包管理
Mapreduce部署是总会涉及到第三方包依赖问题,这些第三方包配置的方式不同,会对mapreduce的部署便捷性有一些影响,有时候还会导致脚本出错.本文介绍几种常用的配置方式: 1. HADOOP_ ...
随机推荐
- linux常见面试题及答案
1. 在Linux系统中,以文件方式访问设备. 2. Linux内核引导时,从文件/etc/fstab中读取要加载的文件系统. 3. Linux文件系统中每个文件用i字节来标识. 4. 全部磁盘块由四 ...
- POJ 1364 King (差分约束)
King Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 8660 Accepted: 3263 Description ...
- 【js】sort()
//为了实现排序,sort()方法会调用每个数组项的toString()转型方法,然后比较得到的字符串, //以确定如何排序.即使数组中的每一项都是数值,sort()方法比较的也是字符串, var v ...
- Concurrency Managed Workqueue(四)workqueue如何处理work
一.前言 本文主要讲述下面两部分的内容: 1.将work挂入workqueue的处理过程 2.如何处理挂入workqueue的work 二.用户将一个work挂入workqueue 1.queue_w ...
- linux程序设计——套接字选项(第十五章)
如今能够改进客户程序,使它能够连接到不论什么有名字的主机,这次不是连接到演示样例server,而是连接到一个标准服务,这样就能够演示port号的提取操作了. 大多数UNIX和一些linux系统都有一项 ...
- PI专利网站
PI专利网站: 1.http://www.powerint.com/company/patents/trademarks 2.http://patft.uspto.gov/netacgi/nph-Pa ...
- 江南白衣 Java性能优化PPT
会后江南白衣花费数日整理PPT,到1.4版本共66页,内容翔实且旁征博引,不断校正且力求做到极致的匠艺精神值得尊敬! 技术大牛飒然Hang如是说到: “技术大神中,除了陈皓就是白衣了,四十岁还能钻研. ...
- 模拟HTTP请求获取返回值
package org.jeecgframework.core.util; import java.io.BufferedReader; import java.io.IOException; imp ...
- linux安装php环境,yum安装php环境
用yum来管理安装Apache PHP Mysql的基本安装.1. 安装Apahce, PHP, Mysql, 以及php连接mysql库组件.yum -y install httpd php mys ...
- Spring aop与AspectJ的区别?
根据我看spring官方文档的理解(不出意外是最正确的答案): ①选择spring的AOP还是AspectJ? spring确实有自己的AOP.功能已经基本够用了,除非你的要在接口上动态代理或者方法拦 ...