记一次Caused by: java.lang.NoSuchFieldError 排查过程

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/qq_22222499/article/details/100166304

错误现象

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

分析问题

  1. 此问题典型的jar包冲突,执行引用了的class类没有这个属性,导致报错了
  2. 找出代码里有问题的类,加载来源于哪个jar包
  3. 分析代码里引用的jar包版本,是4.5.9,这个jar包在hive目录下也有,只是版本不一样,明显加载了4.2.5的这个,问题找到
  4. 解决方法,把机器上已存在jar包升级,此方法不推荐,怕产生其它问题,第二个方法修改代码引用的jar包版本,和线上一致,问题解决

问题总结

所类问题NoSuchxx,都是一样的问题,都是加载了,不是我们想加载的类导致的,核心解决是找出有问题的类,从哪个jar包加载的,再处理问题,一味的去百度,解决不了自身的问题

猜你喜欢

转载自blog.csdn.net/qq_22222499/article/details/100166304
今日推荐