hive默认是存储到Derby中的,Derby是Java语言编写的微型,常用于内嵌在Java程序中的数据库.

但是derby有个缺点,Derby同一个数据库的实例文件不支持多个客户端同时访问.如果你启动了两个终端软件执行hive的话,就会抛出异常出来.

hive内置数据库有个缺点就是你建了一个表关闭再打开就会发现自己当时见的表找不到了.找不到的原因是元数据schema存到了Derby中, 你启动hive之后,hive没有找到上一个Derby的数据,因为derby默认是将你数据库文件存到你执行hive指令的所在的当前文件夹的 metastore_db中了.
比如说你在 hive根目录执行了 hive指令打开控制台,那么就会在hive的根目录下生成一个metastore_db的文件.

hive的元数据存储设置在MySQL中

1.安装MySQL
2.修改hive配置
3.复制jar包到hive
4.启动验证

修改hive配置

去conf目录里面 找到修改 hive-site.xml ,如果没有的话就新建一个hive-site.xml文件

第一个配置是hive连哪个数据找到元数据,,需要修改自己的数据库的连接信息
第二个是驱动 一般不用改.
第三个是账号 根据自己情况按需修改
第四个是密码 根据自己的情况按需修改.

进入到:/root/soft/hive-1.2.1/conf 目录下面找到

  1. [root@zjj101 conf]# pwd
  2. /root/soft/hive-1.2.1/conf

自行新建一个hive-site.xml ,然后填写下面的信息,填写完了 esc ! wq 保存

需要注意,如果MySQL版本是8.0以上的,可能需要 com.mysql.cj.jdbc.Driver 的驱动
就将下面的com.mysql.jdbc.Driver 改成com.mysql.cj.jdbc.Driver

  1. <?xml version="1.0"?>
  2. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  3. <configuration>
  4. <property>
  5. <name>javax.jdo.option.ConnectionURL</name>
  6. <value>jdbc:mysql://MySQL的ip:3306/metastore</value>
  7. <description>JDBC connect string for a JDBC metastore</description>
  8. </property>
  9. <property>
  10. <name>javax.jdo.option.ConnectionDriverName</name>
  11. <value>com.mysql.jdbc.Driver</value>
  12. <description>Driver class name for a JDBC metastore</description>
  13. </property>
  14. <property>
  15. <name>javax.jdo.option.ConnectionUserName</name>
  16. <value>root</value>
  17. <description>username to use against metastore database</description>
  18. </property>
  19. <property>
  20. <name>javax.jdo.option.ConnectionPassword</name>
  21. <value>root</value>
  22. <description>password to use against metastore database</description>
  23. </property>
  24. </configuration>

用连接工具手动在MySQL上面创建数据库

然后手动创建上面配置的数据,注意字符集不要选择utf-8 ,选了就报错,要选择latin1 的字符集.必须是latin1,否则就报错.

  1. CREATE DATABASE metastore ;
  2. alter DATABASE metastore charset=latin1;

然后找个MySQL驱动,根据你MySQL的版本找不同的驱动 ,

我的是 mysql-connector-java-5.1.27.tar.gz , 上传到linux,进行解压,拿到里面的
mysql-connector-java-5.1.27-bin.jar 放到 /root/soft/hive-1.2.1/lib 目录那里

启动hive

直接执行

  1. [root@zjj101 lib]# hive

查看解决结果
启动成功

hive元数据存到MySQL中 - 图1

错误问题

Unable to instantiate org.apache.hadoop.hive.ql.metadata.SessionHiveMetaStor

看看是不是hive的MySQL lib驱动版本问题

Loading class com.mysql.jdbc.Driver'. This is deprecated. The new driver class iscom.mysql.cj.jdbc.Driver’. The driver is automatically registered via the SPI and manual loading of the driver class is generally unnecessary.

解决办法,修改/root/soft/hive-1.2.1/conf/hive-site.xml

将 com.mysql.jdbc.Driver 修改为 com.mysql.cj.jdbc.Driver
hive元数据存到MySQL中 - 图2