在寫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包衝突
- 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
是排除我不想要的依賴。