You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Hive与Hadoop类路径冲突:SLF4J多绑定及方法缺失报错

解决Hive与Hadoop的类路径冲突问题(SLF4J多绑定+Guava方法缺失)

报错信息

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/usr/local/hive/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.35.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: 'void com.google.common.base.Preconditions.checkArgument(boolean, java.lang.String, java.lang.Object)'
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357)
at org.apache.hadoop.conf.Configuration.set(Configuration.java:1338)
at org.apache.hadoop.mapred.JobConf.setJar(JobConf.java:536)
at org.apache.hadoop.mapred.JobConf.setJarByClass(JobConf.java:554)
at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:448)
at org.apache.hadoop.hive.conf.HiveConf.initialize(HiveConf.java:5144)
at org.apache.hadoop.hive.conf.HiveConf.<init>(HiveConf.java:5107)
at org.apache.hive.beeline.HiveSchemaTool.<init>(HiveSchemaTool.java:96)
at org.apache.hive.beeline.HiveSchemaTool.main(HiveSchemaTool.java:1473)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.base/java.lang.reflect.Method.invoke(Method.java:568)
at org.apache.hadoop.util.RunJar.run(RunJar.java:323)
at org.apache.hadoop.util.RunJar.main(RunJar.java:236)

解决方案

1. 处理SLF4J多绑定冲突

错误显示Hive和Hadoop各自携带了SLF4J的不同实现,导致绑定冲突。只需移除其中一个冲突jar即可:

  • 定位Hadoop中的冲突jar:/home/hadoop/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.35.jar
  • 重命名该jar(保留备份方便回滚):
    mv /home/hadoop/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.35.jar /home/hadoop/hadoop/share/hadoop/common/lib/slf4j-reload4j-1.7.35.jar.bak
    

2. 修复Guava版本不一致问题

NoSuchMethodError是因为Hive和Hadoop依赖的Guava版本不兼容,高版本的Guava才有该方法。统一两者的Guava版本:

  • 分别查看Hive和Hadoop的Guava版本:
    ls -l /usr/local/hive/lib/guava*.jar
    ls -l /home/hadoop/hadoop/share/hadoop/common/lib/guava*.jar
    
  • 保留版本较高的Guava,替换低版本:
    假设Hive的Guava版本更高,执行以下命令:
    # 备份Hadoop中的旧版本Guava
    mv /home/hadoop/hadoop/share/hadoop/common/lib/guava-*.jar /home/hadoop/hadoop/share/hadoop/common/lib/guava-old.jar.bak
    # 复制Hive的高版本Guava到Hadoop的lib目录
    cp /usr/local/hive/lib/guava-*.jar /home/hadoop/hadoop/share/hadoop/common/lib/
    
  • 或者通过Hive配置优先加载自身Guava:
    复制Hive的hive-env.sh.template为hive-env.sh,添加以下配置:
    export HIVE_AUX_JARS_PATH=/usr/local/hive/lib/guava-*.jar
    

3. 验证修复

重新运行Hive的schematool或其他命令,检查是否不再出现报错。

内容的提问来源于stack exchange,提问作者Muath Al-Ghamdi

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.11 10:18:57