java.lang.NoSuchMethodError: com.google.common.collect.Sets.newConcurrentHashSet()异常解决思路

  通过Spark-submit提交的任务抛出了java.lang.NoSuchMethodError: com.google.common.collect.Sets.newConcurrentHashSet()Ljava/util/Set的异常,去网上搜了一下解决思路,大概有以下几种方法,供大家参考下:

  一、Guava低版本和高版本的冲突。newConcurrentHashSet这个方法是在Guava-15.0及更高版本中在出现的,如果你的程序中有其它的jar包依赖了低版本的guava,如guava-14.0等,你就需要此jar包找出来,并且把低版本的guava从此jar包中移除出去。

          移除方法:假如是A jar包中依赖了低版本的guava,可以在pom文件中A jar下加入如下代码

               <dependency>
                  <groupId>A</groupId>
                  <artifactId>A</artifactId>
                  <version>1.0</version>
                  <exclusions>
                   <exclusion>
                   <groupId>com.google.guava</groupId>
                   <artifactId>guava</artifactId>
                 </exclusion>
               </exclusions>
             </dependency>

           p.s jar包依赖关系的查找:

            1、Eclipse下直接打开pom文件,选择Dependency Hierarchy选项进行查看

             

          2、Linux 下通过命令:mvn dependency:tree 来进行查看


    二、 guava 版本和 google-collections冲突。 找到依赖google-collections的jar包,把依赖关系去掉。

                移除方法:假如是A jar包中依赖了低版本的google-collections,可以在pom文件中A jar下加入如下代码

               <dependency>
                  <groupId>A</groupId>
                  <artifactId>A</artifactId>
                  <version>1.0</version>
                  <exclusions>
                   <exclusion>
                   <groupId>com.google.collections</groupId>
                   <artifactId>google-collections</artifactId>
                 </exclusion>
               </exclusions>
             </dependency>

    三、 Hadoop集群或者spark集群中的jar包的影响:这种情况是最难解决的一种情况,你可以通过此种方法打印出是哪个jar包导致的此错误

             在你程序抛异常的那句话上面加上如下代码:

               System.out.println("----------------------" + this.getClass().getResource("/com/google/common/collect/Sets.class"));

              运行你的代码,会打印出含有Sets这个类的jar包,然后检查此jar包出现在何处,看是否可以去掉。去掉是最不好的一种方法。


    题外话:我程序中的错误就是因为Spark提交任务后老是加载hadoop安装目录下的一个avro-tools-1.7.6-cdh5.5.0.jar的一个jar包,这个jar包我又没法去掉,本来想着在spark-defaults.conf 文件下加入这句话:spark.driver.extraClassPath=...../guava-17.0.jar,后来发现Spark程序刚启动的时候确实加载了Guava,但后来到各个机器上运行的时候依然报错,索性放那没解决。如果大家有什么好的方法,欢迎指教    

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
回答: 引发java.lang.NoSuchMethodError异常的原因是在使用Spark-submit提交任务时,调用了com.google.common.collect.Sets.newConcurrentHashSet()方法,但该方法在当前环境中不存在。根据引用\[1\]提供的解决思路,有以下几种方法可以尝试解决该问题。首先,可以检查guava库的版本是否与其他依赖库兼容。其次,可以尝试通过引用\[2\]中的代码来查看当前环境中是否存在com.google.common.collect.Sets类。最后,如果你正在使用curator、zookeeper和guava这三个库,需要确保它们的版本兼容性。根据引用\[3\]中的错误信息,可以看到在使用curator时出现了版本兼容性问题。你可以尝试更新curator和guava的版本,以解决该问题。 #### 引用[.reference_title] - *1* *2* [java.lang.NoSuchMethodError: com.google.common.collect.Sets.newConcurrentHashSet()异常解决思路](https://blog.csdn.net/fengzheku/article/details/50688044)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] - *3* [java.lang.NoSuchMethodError: com.google.common.util.concurrent.MoreExecutors.sameThreadExecutor()](https://blog.csdn.net/qq_39900031/article/details/118108535)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insert_down1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值