安装了hive,遇到了许多问题,总结:
1.启动hive需要先启动Hadoop集群,不然会报错。
2.之前我本来想用windows下安装的MySQL来作为元数据存储,但是遇到了许多问题。主要就是pc端ip不固定,因为连接校园网,所以每次都会重新分配ip,导致我的虚拟机和本机的MySQL连接经常会出问题,所以又费了很大功夫在虚拟机上安装了MySQL。推荐一篇很详细的教程(centos7为例):linux(Centos7)安装mysql - binbin_cloud - 博客园 (cnblogs.com)
3.初始化命令报错(schematool -dbType mysql -initSchema)
org.apache.hadoop.hive.metastore.HiveMetaException: Failed to get schema version. Underlying cause: java.sql.SQLException : Access denied for user 'root'@'node01' (using password: YES)
这个问题花了很长时间,网上的很多教程说的是MySQL中用户权限不够,但是我可以肯定已经分配好了权限,而且我在windows下已经可以用navicat连接到虚拟机的MySQL了,但是一到初始化就报这个错误。后来我想到在配置conf/hive-site.xml文件时,我是根据教程直接复制了一份默认文件进行修改添加,而这个文件里有很多其他属性并不知道含义。后来看到有一篇安装教程直接将配置文件中除了MySQL配置部分全部覆盖,我按照这个办法,果然成功解决了问题。贴出我的配置文件:(MySQL8.x以上驱动名需要加.cj)
<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.51.100:3306/hive?createDatabaseIfNotExist=true</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>password</value> </property> <property> <name>hive.metastore.schema.verification</name> <value>false</value> </property> </configuration>
虽然我之前也尝试修改过hive-site文件,但估计是修改的不完全,总之问题就出现在这里,而不是用户权限问题
4.如果你的Hadoop和hive版本不匹配的话,可能会出现版本jar包的冲突,用高版本jar包覆盖低版本jar包就可以了,详见:Hive启动报错:java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument - 狗子的进阶史 - 博客园 (cnblogs.com)
5.这段错误代码具体原因我忘记了,剪贴板找到的。没记错的话应该是如果没有初始化而直接启动hive,会产生metastore_db文件,需要删除它再初始化。如果先前测试的时候在hive中建了数据库,也要先删除这个数据库
HiveMetaException: Failed to get schema version. Underlying cause: com.mysql.cj.jdbc.exceptions.CommunicationsException : Communications link failure The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
贴上成功安装的截图:(太不容易了