exception in thread "main" java.lang.nosuchmethoderror: com.google.common.base.preconditions.checkargument(zljava/lang/string;ljava/lang/object;)v
时间: 2023-06-05 11:47:10 浏览: 363
这是一个程序运行时出现的错误,表明在类"com.google.common.base.preconditions"中找不到名为"checkArgument"的方法,该方法应该有一个字符串类型的参数和一个对象类型的参数。这可能是由于缺少依赖或版本不匹配导致的。建议检查项目依赖关系并确保所有依赖都是最新版本。
相关问题
Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V at org.apache.hadoop.conf.Configuration.set(Configuration.java:1357) at org.apache.hadoop.conf.Configurati
on.set(Configuration.java:1338) at org.apache.hadoop.util.GenericOptionsParser.parse(GenericOptionsParser.java:196) at org.apache.hadoop.util.GenericOptionsParser.parse(GenericOptionsParser.java:174) at org.apache.hadoop.mapred.JobConf.loadFromCmdLine(JobConf.java:838) at org.apache.hadoop.mapred.JobConf.<init>(JobConf.java:656) at org.apache.hadoop.examples.WordCount.main(WordCount.java:39)
这个错误通常是因为 Hadoop 版本和 Guava 版本不匹配造成的。解决办法是更新项目中使用的 Guava 版本,或者使用匹配当前 Hadoop 版本的 Guava 版本。
[root@hadoop0 hive3.1]# ./bin/hive which: no hbase in (/home/bigdata/Bin:/opt/apps/jdk1.8.0_381/bin:/bin:/sbin:/home/bigdata/Bin:/opt/apps/jdk1.8.0_381/bin:/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/bigdata/.local/bin:/home/bigdata/bin) Exception in thread "main" java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/Object;)V 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:5102) at org.apache.hadoop.hive.common.LogUtils.initHiveLog4jCommon(LogUtils.java:97) at org.apache.hadoop.hive.common.LogUtils.initHiveLog4j(LogUtils.java:81) at org.apache.hadoop.hive.cli.CliDriver.run(CliDriver.java:699) at org.apache.hadoop.hive.cli.CliDriver.main(CliDriver.java:683) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.hadoop.util.RunJar.run(RunJar.java:323) at org.apache.hadoop.util.RunJar.main(RunJar.java:236)
<think>好的,我现在需要帮助用户解决他们在启动Hive时遇到的错误。首先,我得仔细看一下用户提供的错误信息,找出关键点。
用户执行的是`./bin/hive`,然后系统提示了`which: no hbase in ...`,这可能意味着环境变量中没有找到HBase的路径,但暂时可能不是主要问题。接下来的错误是Java的`NoSuchMethodError`,具体指向`com.google.common.base.Preconditions.checkArgument`方法。这个错误通常是由于Guava库的版本不兼容引起的,因为Hive和Hadoop依赖不同版本的Guava。
接下来,我需要回忆Hive和Hadoop各自的Guava版本要求。比如,Hadoop 3.x通常需要Guava 27.0-jre,而Hive 3.1.2可能依赖Guava 19.0或更早版本。如果用户的环境中Hadoop和Hive的Guava版本不一致,就会导致这样的问题。
然后,我应该建议用户检查Hadoop和Hive的lib目录下的Guava库版本。比如,查看`$HADOOP_HOME/share/hadoop/common/lib`和`$HIVE_HOME/lib`中的guava-x.x-jre.jar文件。如果发现版本冲突,需要保留较高版本的Guava,通常是Hadoop所需的版本,并删除Hive中较低版本的Guava。
另外,用户的环境变量可能存在问题,导致系统找不到正确的路径,但主要的错误还是Guava版本冲突。所以解决步骤应集中在处理Guava库上,同时也可以提醒用户检查环境变量配置是否正确,确保HBase的路径是否被正确添加,尽管这可能不是当前错误的主要原因。
最后,需要确保用户按照步骤操作后,重新启动Hive,并验证问题是否解决。如果问题依旧,可能需要进一步检查其他依赖库的版本兼容性,或者考虑重新安装兼容版本的Hive和Hadoop。</think>这个错误提示表明Hive在启动时遇到了依赖库版本冲突问题,主要涉及**Guava库版本不兼容**。以下是逐步分析和解决方案:
---
### **1. 错误原因分析**
- **关键报错信息**:`java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument(...)`
- 此错误表明Hive运行时调用了**不兼容的Guava库版本**(Google Core Libraries)。
- Hadoop和Hive对Guava库的版本要求不同,导致类加载时方法签名不匹配。
- **环境检查**:
- Hadoop 3.x 通常需要 **Guava ≥27.0-jre**
- Hive 3.1.x 默认依赖 **Guava 19.0**(但可能与Hadoop冲突)
---
### **2. 解决方案**
#### **步骤1:定位冲突的Guava版本**
检查Hadoop和Hive的lib目录,找到所有Guava库文件:
```bash
# 检查Hadoop的Guava版本
ls $HADOOP_HOME/share/hadoop/common/lib/guava-*.jar
# 检查Hive的Guava版本
ls $HIVE_HOME/lib/guava-*.jar
```
#### **步骤2:统一Guava版本(保留高版本)**
- **删除Hive中的低版本Guava**(例如guava-19.0.jar):
```bash
rm $HIVE_HOME/lib/guava-19.0.jar
```
- **复制Hadoop的高版本Guava到Hive的lib目录**(例如guava-27.0-jre.jar):
```bash
cp $HADOOP_HOME/share/hadoop/common/lib/guava-27.0-jre.jar $HIVE_HOME/lib/
```
#### **步骤3:验证环境变量**
确保`HADOOP_HOME`和`HIVE_HOME`已正确配置,并在`PATH`中包含相关路径:
```bash
export HADOOP_HOME=/path/to/hadoop
export HIVE_HOME=/path/to/hive
export PATH=$HADOOP_HOME/bin:$HIVE_HOME/bin:$PATH
```
---
### **3. 附加检查**
- **HBase路径问题**:
- 日志中提示`which: no hbase in ...`,如果不需要HBase集成,可忽略此警告。
- 若需要HBase支持,需确保HBase的二进制路径已加入`PATH`环境变量。
- **依赖库全面检查**:
使用以下命令检查其他潜在依赖冲突:
```bash
lsof -p <Hive_PID> | grep jar
```
---
### **4. 重启验证**
完成上述步骤后,重新启动Hive:
```bash
cd $HIVE_HOME && ./bin/hive
```
若问题仍未解决,建议检查Hive和Hadoop的版本兼容性,或考虑升级Hive到与Hadoop匹配的版本。
阅读全文
相关推荐

















