错误现象
UDF 函数里引用了httpclient jar包,用来请求外网,报错
Caused by: java.lang.NoSuchFieldError: INSTANCE
at org.apache.http.conn.ssl.SSLConnectionSocketFactory.<clinit>(SSLConnectionSocketFactory.java:151)
at org.apache.http.impl.client.HttpClientBuilder.build(HttpClientBuilder.java:977)
at org.apache.http.impl.client.HttpClients.createDefault(HttpClients.java:56)
at com.daojia.bigdata.map.GaoDei.evaluate(GaoDei.java:32)
... 23 more
分析问题
- 此问题典型的jar包冲突,执行引用了的class类没有这个属性,导致报错了
- 找出代码里有问题的类,加载来源于哪个jar包
- 分析代码里引用的jar包版本,是4.5.9,这个jar包在hive目录下也有,只是版本不一样,明显加载了4.2.5的这个,问题找到
- 解决方法,把机器上已存在jar包升级,此方法不推荐,怕产生其它问题,第二个方法修改代码引用的jar包版本,和线上一致,问题解决
问题总结
所类问题NoSuchxx,都是一样的问题,都是加载了,不是我们想加载的类导致的,核心解决是找出有问题的类,从哪个jar包加载的,再处理问题,一味的去百度,解决不了自身的问题