記一次Caused by: java.lang.NoSuchFieldError 排查過程

錯誤現象

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包加載的,再處理問題,一味的去百度,解決不了自身的問題

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章