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