1、首先Hadoop与hive的版本一定要配合好,之前使用的是Hadoop3.x的版本配上Hive2.x一直会报错,就算配置都正确,因为版本问题也一直会报错,主要报错为com.google......,主要原因还是jar包冲突;
从报错信息来看:
一,java.lang.NoSuchMethodError
原因:
1.系统找不到相关jar包
2.同一类型的 jar 包有不同版本存在,系统无法决定使用哪一个
二,com.google.common.base.Preconditions.checkArgument
根据百度可知,该类来自于guava.jar
三,查看该jar包在hadoop和hive中的版本信息
hadoop-3.2.1(路径:hadoop\share\hadoop\common\lib)中该jar包为 guava-27.0-jre.jar
hive-2.3.6(路径:hive/lib)中该jar包为guava-14.0.1.jar
四,解决方案===!!!!!!!!!!!!!!!!!!!!!!!!
删除hive中低版本的guava-14.0.1.jar包,
将hadoop中的guava-27.0-jre.jar复制到hive的lib目录下即可。
五,成功运行hive
3、一定要记得加入 MySQL 驱动包(mysql-connector-java-5.1.40-bin.jar)该 jar 包放置在 hive 的根路径下的 lib 目录
4、注意:当使用的 hive 是 2.x 之前的版本,不做初始化也是 OK 的,当 hive 第一次启动的 时候会自动进行初始化,只不过会不会生成足够多的元数据库中的表。在使用过程中会 慢慢生成。但最后进行初始化。如果使用的 2.x 版本的 Hive,那么就必须手动初始化元 数据库。使用命令:
schematool -dbType mysql -initSchema
5、之前安装hive的版本太低,删除了低版本的hive,后来重新下载了3.x版本的hive,发现schematool -dbType mysql -initSchema初始化报错:
Error: Table 'CTLGS' already exists (state=42S01,code=1050) org.apache.hadoop.hive.metastore.HiveMetaException: Schema initialization FAILED! Metastore state would be inconsistent !! Underlying cause: java.io.IOException : Schema script failed, errorcode 2
原因:其实之前你已经初始化过了,后来你更改了hive或者MySQL的配置文件后,导致他们之间无法通信。再进行初始化时就会发生这样的错误。
解决办法:
mysql dump -uUSER -pPASSWORD DBNAME > /tmp/my_backup.sql drop database DBNAME; create database DBNAME; mysql -uUSER -pPASSWORD DBNAME < /tmp/my_backup.sql ##第一句中,user,password DBNAMe都换成你自己的。后面的路径是相对路径,你可以更换路径,这一步只不过是把你之前的数据库先备份一下。 ##接下来删掉数据库,再重新创建数据库,然后再啊数据库拷回来就好了
这种错误的情况,一般就是换用户,换数据库,就解决了。
最后关于Hive的安装配置,可以参照:
https://dblab.xmu.edu.cn/blog/1080-2/ (推荐,比较全面)