derby的缺点
默认使用 derby ,只能启动一个 hive 客户端,再启动一个 hive 客户端就会报错,在企业开发中,是肯定不行的
安装mysql
hive3.1.x centos7安装部署mysql5.7.32(.tar.gz解压缩版)
复制mysql驱动
将 mysql 驱动 mysql-connector-java-5.1.47.jar 上传到 /program/hive-3.1.2/lib/ 目录下
配置
在 /program/hive-3.1.2/conf 目录下新建 hive-site.xml 文件
执行下面命令:
cd /program/hive-3.1.2/conf
vim hive-site.xml
内容如下:
注意: ip、port、用户名、密码
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 连接的 URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://hadoop1:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc 连接的 Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- 连接的mysql的用户名-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- 连接的mysql的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<!-- Hive 元数据存储版本的验证,只derby需要验证 -->
<property>
<name>hive.metastore.schema.verification</name>
<value>false</value>
</property>
<!--元数据存储授权,只derby需要授权-->
<property>
<name>hive.metastore.event.db.notification.api.auth</name>
<value>false</value>
</property>
<!-- Hive 在 HDFS 的工作目录。默认是 /user/hive/warehouse目录 -->
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
</configuration>
注意1: 修改 mysql 的用户名、密码
mysql创建hive元信息数据库
登录 MySQL
mysql -uroot -proot
新建 Hive 元数据库
create database metastore;
退出
exit
或
quit
初始化 Hive 元数据库
schematool -initSchema -dbType mysql -verbose
解释:
- -verbose:显示详细信息
显示如下信息表示成功:
Initialization script completed
schemaTool completed
启动hive
注意:需要先启动 hadoop NameNode 和 DataNode、yarn
/program/bin/hadoop.sh start
hive
测试启动多个hive
之前的 hive客户端 不关闭,再次打开 hive
hive
查询 t_user 表
select * from t_user;
显示如下:
FAILED: SemanticException [Error 10001]: Line 1:14 Table not found 't_user'
不存在 t_user 表
查看数据文件
在 HDFS 查看数据文件,文件还在,如下图:
解决
MySQL 没有 t_user 表的元数据信息,再次创建表,执行下面命令:
create table t_user (id string,username string,password string);
然后再次查询,就能查到数据,执行结果如下:
OK
1 lilei 123456
数据保存在 hadoop中,所以 之前的 数据 还在,只是保存 元数据 的数据库换成 mysql 了
插入数据
insert into t_user(id,username,password) values (2,'hanmeimei','11111');
查看hadoop web管理页面
多出一个文件 000000_0_copy_1

