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
对此问题在配置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的名字
再次运行,问题解决。