1. 程式人生 > >spark整合es遇到Guava jar包衝突問題:java.lang.NoSuchMethodError

spark整合es遇到Guava jar包衝突問題:java.lang.NoSuchMethodError

錯誤資訊:

Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurrent/Executor;
  at org.elasticsearch.threadpool.ThreadPool.<clinit>(ThreadPool.java:190)
  at org.elasticsearch.client.transport.TransportClient$Builder.build(TransportClient.java
:133) at org.springframework.data.elasticsearch.client.TransportClientFactoryBean.buildClient(TransportClientFactoryBean.java:89) at org.springframework.data.elasticsearch.client.TransportClientFactoryBean.afterPropertiesSet(TransportClientFactoryBean.java:85) at org.springframework.beans.factory
.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1637) at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1574) ... 56 more

通過前三行錯誤資訊可以看到是找不到某個方法,這種問題一種可能性是缺失jar包,一種可能性是jar包衝突,我這裡是jar包衝突。
解決過程
根據報錯資訊找到相關jar,可以看出是guava的jar衝突
於是開始排除guava
在intellij idea的Maven projects 中搜索和Guava相關jar,如下圖
這裡寫圖片描述

可以看到專案有很多地方依賴guava,選擇一個後回車,可以看到這個guava的版本,雙擊後還可以進入當前jar所在的pom檔案。如果想排除這個jar,就如下操作
這裡寫圖片描述
這樣pom檔案也會同步修改,如此步驟依次排除,直到最後剩下自己滿意的。
我排除之後。將專案打包,上傳到spark叢集.然後執行。很鬱悶,還是同樣的問題。
明明我的Guava jar中是有這個方法的,但為何老是找不到呢。在經過一段時間思考後還是沒有發現問題的原因,於是找到同事一起討論這個問題,後來發現,spark容器也依賴了Guava, 而其依賴的版本是1.4 。而es 中 依賴的Guava 是1.8 ,在1.8的jar中是有那個方法的,但1.4中卻是沒有的,這也就解釋了為何在專案中把Guava該排的都排除了卻依然有問題。於是將spark叢集中的Guava jar替換掉,重新執行專案,可以正常執行。

問題總結:
1, 解決問題時,考慮問題不夠全面
在排除專案中可能的衝突jar後,依然有這個問題,就應該把思維發散出去,考慮一下其它有可能導致jar衝突的可能性。
2,解決問題時如果沒有思路,就從頭到尾梳理專案執行的整個流程,每個細節都不要忽略,你會發現,往往是一些你沒有注意到的地方導致的問題的發生,而我們卻把精力放在了別處,方向錯了,終點遙不可期。
3, 如何讓spark引用專案中指定的jar,這將是我們接下來需要解決的問題,由於剛剛接觸spark,這塊需要去分析下。
問題延伸:
如下錯誤可能是jar包衝突:

1.java.lang.NoSuchMethodError
2.java.lang.ClassNotFoundException
3.java.lang.NoClassDefFoundError

Jar 衝突排除方法:
1, 通過intellij idea 去排除,方法同上
2, 通過maven命令檢視依賴資訊,手動排除,例如

mvn dependency:tree | grep guava

這裡寫圖片描述

相關推薦

spark整合es遇到Guava jar衝突問題:java.lang.NoSuchMethodError

錯誤資訊: Caused by: java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.directExecutor()Ljava/util/concurr

執行jar出現java.lang.NoSuchMethodError錯誤

出現這種錯誤是由於jar包程式中有兩個以上的相同類名檔案,在打成jar的過程中,相同的類名檔案會被忽略。所以解決方法是,如果要用到兩個相同的類名檔案時,可以將檔案類名更改成不一樣的。

因缺少jedis.jar報"java.lang.NoSuchMethodError: redis.clients.jedis.JedisPool..."問題

一、問題描述 專案是基於dubbo的2.5.3版本,將註冊中心zookeeper(zookeeper://127.0.0.1:2181)改為redis的(redis://127.0.0.1:6379),新增redis依賴關係,啟動系統報異常“java.lang.NoSu

spark on yarn執行產生jar衝突問題

1.1 問題描述 Spark Streaming程式解析protobuf序列化的資料時,--jars 來新增依賴的protobuf-java-3.0.0.jar包,使用local模式程式正常,使用yarn模式時會報找不到方法的錯誤,如下所示: 1.2 解決方法 分析local模式能執行,yarn模式不能執行

Hadoop 運行jarjava.lang.ClassNotFoundException: Class com.zhen.mr.RunJob$HotMapper not found

yar error not caused not found mapred info group col 錯誤如下 Error: java.lang.RuntimeException: java.lang.ClassNotFoundException: Class com

Spring boot Elasticsearch整合 遇到Guava版本的坑 java.lang.NoSuchMethodError: com.google.common.util.concurr

先說報錯:java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.xxxx() 報錯的意思是找不到方法,其實很大部分原因是因為jar衝突,出現找不到方法沒有jar包的情況很少的 我的原因就是

IDEA SpringBoot 打jar 出現java.lang.ClassNotFoundException

錯誤資訊如下: . ____ _ __ _ _ /\\ / ___'_ __ _ _(_)_ __ __ _ \ \ \ \ ( ( )\___ | '_ | '_| | '_ \/ _` | \ \ \ \ \\/ ___)| |_)| |

spring-data-redis和jedis整合版本導致jar衝突解決

在jedis和spring-data-redis整合測試時出現該異常,搜尋後瞭解到該類異常時由於jedis和spring-data-redis的版本導致jar包衝突了。搜尋過程中發現該類問題出現的頻率很高,其中有一篇文章提到了官方提到的整合所需的必備環境,後來到官網檢視後確實

java web的jar衝突導致NoSuchMethodError報錯

 在測試指令碼編寫和應用部署時,經常遇到的一 個問題是:java.lang.NoSuchMethodError。這個問題產生的根本原因是執行時應用載入的jar包版本不是應用程式碼真正需要的版本。要解決這個問題,就要讓應用載入真正“HasSuchMethod"的類所在的jar包。解

jar衝突及解決步驟

轉載:https://www.cnblogs.com/godtrue/p/6220512.html 報錯資訊 十二月 14, 2016 7:52:34 下午 org.apache.catalina.core.ContainerBase addChildInternal 嚴重: Contain

解決maven jar衝突,使用python指令碼檢查

       在mvn工程中,經常因為多級引入導致jar包衝突,然後會使用 mvn dependency:tree>dependency.txt 匯出mvn依賴樹關係 , 然後從dependency.txt檔案中解析出衝突的jar包即可。解析的

Maven實戰-由一次jar衝突來詳述 Maven 依賴範圍及依賴調節原則

這篇文章的緣由是剛來搭建的專案有jar包衝突,報下面這個錯基本就是servlet-api包衝突無疑了 Caused by: java.lang.ClassCastException: org.springframework.web.SpringServletContainerInitia

整合CAS出現的jar不相容問題

之前的登入是sso做的,現在想用CAS做一下單點登入。專案的基本架構師springboot+springcloud,想加入cas。整合時候,出現了一些問題: 引入了cas的client後。發現 <!-- 引入cas客戶端 --> <dependency>

maven中使用tomcat7外掛servlet-api的jar衝突

一、錯誤日誌     tomcat容器啟動正常,訪問時報出如下錯誤: 配置如下: maven的pom.xml配置   Java Build Path -->Libraries配置 原因分析:   &

解決jar衝突通用方法彙總

                        1.問題 先

【maven】排除maven中jar依賴的解決過程 例子:spring cloud啟動zipkin,報錯maven依賴jar衝突 Class path contains multiple SLF4J bindings.

一直對於maven中解決jar包依賴問題的解決方法糾結不清: 下面這個例子可以說明一個很簡單的解決方法:     專案啟動報錯: Connected to the target VM, address: '127.0.0.1:59412', transport: 'sock

Maven中日誌jar衝突報錯:Class path contains multiple SLF4J bindings

錯誤表現: SLF4J: Class path contains multiple SLF4J bindings.SLF4J: Found binding in [jar:file:/D:/learn

【maven 】jar衝突-記一次衝突解決

1、請到pom.xml檔案所在的目錄(包含父子目錄)下分別執行下面的命令排查是什麼原因導致fastjson版本不正確: mvn dependency:tree -Dverbose -Dincludes=com.alibaba:fastjson 2、配合excusions標籤排除過時的包 &n

PeopleSoft如何查詢jar衝突

PeopleSoft要查詢jar包衝突問題,不像maven可以打印出所有依賴,但既然是在JVM上執行,就可以啟用JVM引數 路經:%ps_cfg_home%\appserv\Domain 檔名:psappsrv.cfg Section:PSTOOLS 引數:JavaVM Options 方式:附加