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://localhost: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>/hive/warehouse</value>
</property>
</configuration>
注意1: 修改 mysql 的用户名、密码
注意2: 修改了 Hive 在 HDFS 的工作目录
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;
会提示错误:不存在该表
原因
因为修改了 Hive 在 HDFS 的工作目录,导致数据找不到了
创建 t_user 表
create table t_user (id string,username string,password string);
插入数据
insert into t_user(id,username,password) values (1,'lilei','123456');
