启动hive报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang

本文解决了一个由于Hive与Hadoop中Guava版本不一致导致的java.lang.NoSuchMethodError错误。通过删除Hive中的低版本Guava jar包,并用Hadoop中的高版本替换,成功解决了问题。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

原文链接:http://www.shangdixinxi.com/detail-1151470.html

从报错信息来看:

一,java.lang.NoSuchMethodError

  原因:1.系统找不到相关jar包

                  2.同一类型的 jar 包有不同版本存在,系统无法决定使用哪一个

二,com.google.common.base.Preconditions.checkArgument

根据百度可知,该类来自于guava.jar

三,查看该jar包在hadoop和hive中的版本信息

  hadoop-3.2.1(路径:hadoop\share\hadoop\common\lib)中该jar包为  guava-27.0-jre.jar

 

分享图片

 

   hive-2.3.6(路径:hive/lib)中该jar包为guava-14.0.1.jar

  分享图片

四,解决方案

删除hive中低版本的guava-14.0.1.jar包,将hadoop中的guava-27.0-jre.jar复制到hive的lib目录下即可。

五,成功运行hive

分享图片

 

<think>好的,用户遇到了MySQL初始化时出现的NoSuchMethodError,具体是关于Guava版本冲突的问题。我需要根据提供的引用内容,尤其是引用[1]和[2],来构建解决方案。首先,这个错误通常是由于不同组件依赖的Guava库版本不一致导致的,比如Hive和Hadoop之间的冲突,但用户这里提到的是MySQL,可能情况类似。 首先,我需要确认用户的环境。用户可能在某个使用MySQL的项目中,比如大数据处理或者某些Java应用,其中同时用到了MySQL连接器和Hadoop等组件,导致Guava版本冲突。Guava是Google的一个核心库,不同版本的方法可能有差异,特别是checkArgument这个方法的变化。 接下来,根据引用[1],解决方法是检查冲突的Guava版本,找到MySQL相关组件和Hadoop或其他库中的Guava版本,然后统一版本。可能需要将较高版本的Guava替换为较低版本,或者反之,视具体情况而定。例如,如果Hadoop需要Guava 27.0,而MySQL连接器自带的是20.0,那么需要替换MySQL的Guava为Hadoop兼容的版本。 然后,用户可能需要检查依赖项,使用Maven或Gradle的依赖树分析工具,找出冲突的来源。例如,在Maven中使用mvn dependency:tree命令,找到所有引入Guava的依赖,排除掉不需要的版本,或者显式指定正确的版本。 另外,引用[3]提到了修改MySQL的配置文件,但该问题可能与网络绑定有关,可能和当前错误无关,但用户可能需要确认MySQL服务是否正常运行,不过主要问题还是版本冲突。 最后,需要指导用户如何替换JAR文件,比如找到MySQL连接器中的Guava库,替换为兼容版本,并确保所有依赖库的版本一致。同时提醒用户备份,避免其他依赖出现问题。 总结步骤:确认错误来源,检查依赖版本,统一Guava版本,替换JAR文件,测试验证。</think>关于MySQL初始化时出现的`NoSuchMethodError: com.google.common.base.Preconditions.checkArgument`错误,这是由于Guava库版本冲突导致的。以下是逐步解决方案: --- ### **问题原因** 此错误通常由以下原因引起: 1. **依赖版本冲突**:MySQL相关组件(如Connector/J或其他依赖库)使用的Guava库版本与其他组件(如Hadoop、Hive等)的Guava版本不一致[^1][^2]。 2. **方法签名不匹配**:高版本Guava中`Preconditions.checkArgument`方法的参数列表与低版本不同,导致JVM加载了低版本Guava时找不到对应方法。 --- ### **解决步骤** #### **1. 定位冲突的Guava文件** - **检查依赖树**:通过构建工具(如Maven/Gradle)分析依赖: ```bash mvn dependency:tree | grep guava ``` 或手动检查项目库路径(如`WEB-INF/lib`或`/usr/share/java`)中所有`guava-*.jar`文件。 #### **2. 统一Guava版本** - **方案一:升级/降级Guava版本** - 若MySQL依赖低版本Guava(如20.0),而其他组件需要高版本(如31.0),需统一版本。 - 在Maven中显式指定Guava版本: ```xml <dependency> <groupId>com.google.guava</groupId> <artifactId>guava</artifactId> <version>30.1-jre</version> <!-- 根据实际需求选择版本 --> </dependency> ``` - **方案二:替换JAR文件** - 手动将MySQL相关库(如`mysql-connector-java-*.jar`)中的Guava替换为与其他组件兼容的版本,并删除冲突的旧版本JAR。 #### **3. 验证配置** - 检查MySQL配置文件(如`my.cnf`)的网络绑定设置,确保服务正常启动[^3]: ```bash bind-address = 0.0.0.0 # 允许远程连接 ``` #### **4. 重启服务** - 重启MySQL及相关服务,确保新配置生效: ```bash systemctl restart mysql ``` --- ### **注意事项** - **依赖隔离**:使用类加载器隔离不同组件的依赖(如Tomcat的`shared.loader`配置)。 - **兼容性测试**:替换Guava版本后需全面测试系统功能,避免引入新问题。 ---
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值