Flink es-sink解決java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW

在寫Flink實例時,遇到將case class 樣例類轉換爲jsonObject後,在添加到es sink source中時,報錯java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW。

問題總結

出現以下問題的原因是jar包的依賴版本問題。解決該問題需要引入高版本的包,同時解決包衝突問題。

java.lang.NoSuchFieldError: FAIL_ON_SYMBOL_HASH_OVERFLOW

從以下兩圖中可以看出,2.3.1的包中確實沒有FAIL_ON_SYMBOL_HASH_OVERFLOW 字段,而在2.8.11版本的包中可以看到註釋,在2.4版本後加入了這個字段,由此問題找到,是因爲引入的jar包版本問題,解決過程中還需要考慮jar包衝突的問題。

在這裏插入圖片描述

在這裏插入圖片描述

  • 解決jar包衝突
  1. IDEA安裝maven helper插件,如下圖,安裝完後重啓IDEA。

在這裏插入圖片描述

2.打開pom文件,在下方會出現dependency Analyzer,點擊這個標籤打開對應界面。如下面第二個圖,圈出來的都是具有衝突的jar包,需要我們逐一解決衝突。

在這裏插入圖片描述
在這裏插入圖片描述

3.將左邊含有衝突的jar包點開,在右邊會出現衝突的包的具體版本和位置。選擇自己要排除的引用,右鍵點擊Exclude即可,解決完衝突後,點擊Reimport重新加載引用,衝突全部解決完左邊列表將是空的。

在這裏插入圖片描述

4.另外可以使用maven 命令來查看具體的引用。使用命令 mvn dependency:tree -Dverbose以層級樹方式查看全部傳遞原來。可以看到層級樹對應的上圖插件的內容(層級樹是父引用在上面,而插件顯示的是父引用在選項欄最下面),這裏還顯示與2.3.1版本的包衝突。

在這裏插入圖片描述

5.上面命令顯示的是全部的傳遞依賴,也可以通過命令控制輸出內容爲自己想要的或不想要的。 -Dincludes= xxx是過濾有xxx字段的依賴,-Dexcludes=xxx是排除我不想要的依賴。

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