java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument

3,641 阅读1分钟

原因是hive和hadoop的guava.jar版本不一致

部署hadoop-3.2.1和hive-3.1.2时,启动hive报错:

SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.10.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/usr/local/hadoop/share/hadoop/common/lib/slf4j-log4j12-1.7.25.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation. SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory] Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V

一开始读报错信息以为是多了一个slf4j的jar,删掉其中一个后,却报了其他错: hadoop@ubuntu:/usr/local/hadoop/share/hadoop/common/lib$ rm slf4j-log4j12-1.7.25.jar hadoop@ubuntu:/usr/local/hadoop/share/hadoop/common/lib$ hive SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder". SLF4J: Defaulting to no-operation (NOP) logger implementation SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details. Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V 看来删错了东西,重新安装配置好hadoop后, 在网上找到了原因是hive和hadoop的guava.jar版本不一致

(hive中)
(hadoop/share/hadoop/common/lib中)

将hadoop的guava.jar替换掉hive中的版本:

终于成功啦~

(多上网查查资料可比自己傻干好) 查到的超好用教程:dblab.xmu.edu.cn/blog/2440-2…