Exception in thread “main“ java.lang.NoSuchMethodError: com.google.comon.base.Preconditions.checkArg

hadoop-3.1.3
hbase-2.2.2-bin

一、问题描述:

在学习林子雨老师编写的《Spark编程基础》时
在这里插入图片描述
使用如下命令运行jar包读取HBase时出现如下错误:Exception in thread “main” java.lang.NoSuchMethodError: com.google.comon.base.Preconditions.checkArgument(ZLjava/lang/String;Ljava/lang/object; )v
Exception in thread “main“ java.lang.NoSuchMethodError: com.google.comon.base.Preconditions.checkArg_第1张图片

二、问题分析:

对此问题在配置hive时也有出现,问题主要是虚拟机内HBase,Spark,Hadoop三者的guava版本不一致导致的。在Hive的安装配置中也有提及。Hadoop的guava.jar存放在/share/common/lib目录下,HBase的guava.jar存放在lib文件夹下

三、解决方案:

只需要将三者中的低版本删除,高版本复制到低版本处即可,具体操作为:
查看Hadoop中的guava版本(根据自身环境修改路径)

 cd /usr/local/hadoop/share/common/lib	#进入目标文件夹
 ll	#查看guava.jar版本

查看HBase中的guava版本

cd /usr/local/hbase/lib
ll

查看Spark中的guava版本

cd /usr/local/spark/jars/hbase
ll

在我的虚拟机中Hadoop中的guava版本最高,为guava-27.0-jre.jar版本,所以我们将其复制到对应的HBase和Spark目录。
(sudo即将root权限赋给hadoop用户)

sudo cp guava-27.0-jre.jar /usr/local/hbase/lib
sudo cp guava-27.0-jre.jar /usr/local/spark/jars/hbase

再使用cd命令切换到HBase和Spark目录删除其中的guava。
(rm -rf 为删除命令,guava改成对应的版本号)

cd /usr/local/hbase/lib
sudo rm -rf guava的名字
cd /usr/local/spark/jars/hbase
sudo rm -rf guava的名字

再次运行,问题解决。

你可能感兴趣的:(关于Hadoop的学习笔记,java,hadoop,hive)