java.lang.NoSuchMethodError
异常通常表示正在运行的Java代码尝试调用一个不存在的方法。在这种情况下,异常信息指出 com.google.common.base.Preconditions.checkArgument
方法不存在或者方法签名不匹配。
com.google.common.base.Preconditions
是Google Guava库中的一个类,提供了一系列静态方法来进行简单的参数验证。checkArgument
方法是其中的一个方法,用于在方法参数不符合特定条件时抛出异常。
这个错误可能是由以下原因引起的:
-
Guava库版本不匹配:如果你的项目依赖于特定版本的Guava库,而你的代码或者构建环境中使用了不同版本的Guava库,可能会导致方法签名不匹配。确保你的项目中只包含一个版本的Guava库,并且该版本的库包含了你需要的方法。
-
类路径问题:可能是因为Guava库没有被正确地添加到类路径中,或者类路径中有多个版本的Guava库,导致运行时找不到正确的方法。
-
构建工具配置错误:如果你使用Maven或Gradle等构建工具,可能是构建配置文件(如pom.xml或build.gradle)中Guava库的依赖配置有误。
为了解决这个问题,你可以尝试以下步骤:
-
检查Guava库的版本:确认你的项目中使用的Guava库版本是否与你的代码相匹配。如果你的项目依赖于特定版本的Guava库,确保没有其他库或模块引入了不同版本的Guava。
-
检查类路径:确保Guava库已经正确地添加到了类路径中。如果你使用的是IDE(如IntelliJ IDEA或Eclipse),检查项目设置中的依赖库是否正确。
-
清理和重建项目:如果你使用的是构建工具,尝试清理并重建你的项目。对于Maven,可以使用
mvn clean install
命令;对于Gradle,可以使用gradle clean build
命令。 -
检查构建配置文件:如果你使用Maven或Gradle,检查pom.xml或build.gradle文件中的Guava依赖是否正确,并且没有引入冲突的版本。
-
更新Guava库:如果你的项目允许,尝试更新到最新版本的Guava库,或者至少是一个包含了你需要的
checkArgument
方法的版本。
我所采用的方式是
删除hive中低版本的guava-19.0.jar包,将hadoop中的guava-27.0-jre.jar复制到hive的lib目录下即可
该包在hadoop中存储的位置是hadoop\share\hadoop\common\lib