Hive安装与测试记录
- 安装前准备
- 安装Hive
- 创建Hbase映射表
- 将Hive以服务形式后台启动
- 使用beeline方式连接
- 使用DBeaver可视化工具链接Hive
- JAVA使用JDBC连接Hive
安装前准备
需要装的软件 | 版本 |
mysql | 5.7.24 |
hadoop | 3.0.0 |
hbase | 1.3.1 |
zookeeper | 3.4.11 |
因为服务器是公司测试服务器 , 所以这四个都已经是安装好的了 , 不做过多介绍 , 安装教程自行百度
安装Hive
下载地址 : https://dlcdn.apache.org/hive/
下载安装一定要找到和你的hadoop , hbase , zookeeper匹配的版本
第一次安装了3.1.2 可以正常运行 , 但是在建和hbase的映射表的时候会找不到表和列族
具体版本对照可参考这篇文章:
https://cloud.tencent.com/developer/article/1084829
我们选择2.3.9版本
将下载好的包解压在/opt/software目录下
tar -zxvf apache-hive-2.3.9-bin.tar.gz -C /opt/software/
将文件夹名称修改为hive
mv apache-hive-2.3.9-bin hive
最后得到下列文件
在/etc/profile中添加环境变量
export HIVE_HOME=/opt/software/hive
export PATH=$PATH:$HIVE_HOME/bin
执行加载配置文件命令
source /etc/profile
执行命令
hive --version
有如下信息则安装成功
如果执行命令不成功 , 请切换root账户下并携带环境变量 , 再尝试
我们进入conf目录下 , 将hive-default.xml.template文件复制并重命名为hive-site.xml
cp hive-default.xml.template hive-site.xml
我们在mysql中创建hive数据库 , 用户管理hive
创建后修改hive-site.xml配置文件
在配置文件中添加如下配置
添加后为防止出现问题需要把该文件同一个name的配置注释掉或删掉
<property>
<name>system:java.io.tmpdir</name>
<value>/usr/local/hive/tmp</value>
</property>
<property>
<name>system:user.name</name>
<value>/usr</value>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>数据库username</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>1234</value>
<description>数据库password</description>
</property>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://123.456.789.111:1234/hive</value>
<description>JDBC元存储的JDBC连接字符串</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.cj.jdbc.Driver</value>
<description>JDBC驱动类名</description>
</property>
我们在建表时可能会出现奇奇怪怪的异常 , 建议在配置文件中添加如下配置 , 使其Hbase , ZK的链接使用我们安装好的Hbase和ZK中的链接
<property>
<name>hive.aux.jars.path</name>
<value>
file:///opt/software/hive/lib/hive-hbase-handler-3.1.2.jar,
file:///opt/software/zookeeper-3.4.11/zookeeper-3.4.11.jar,
file:///opt/software/hbase-1.3.1/lib/hbase-client-1.3.1.jar,
file:///opt/software/hbase-1.3.1/lib/hbase-common-1.3.1.jar,
file:///opt/software/hbase-1.3.1/lib/hbase-server-1.3.1.jar,
file:///opt/software/hbase-1.3.1/lib/hbase-common-1.3.1-tests.jar,
file:///opt/software/hbase-1.3.1/lib/hbase-protocol-1.3.1.jar,
file:///opt/software/hbase-1.3.1/lib/htrace-core-3.1.0-incubating.jar
</value>
</property>
配置好后下载mysql的链接驱动
下载地址 : https://dev.mysql.com/downloads/connector/j/ 或者https://repo1.maven.org/maven2/mysql/mysql-connector-java/
将驱动中的jar包拷贝在hive目录中的lib目录下
在hive目录的bin目录下执行初始化和数据库的链接
schematool -dbType mysql -initSchema
完成后数据库hive库会生成如下表
我们运行hive
hive的命令基本和sql一样 , 我们创建一个库
create database hive_test;
查询所有库
show databases;
使用hive_test库
use hive_test;
创建一张表
create table test(id int,value string);
注意 : 这里的字符型是string相当于mysql中的varchar
显示所有的表
show tables;
创建Hbase映射表
创建Hbase外部表的Hql:
CREATE EXTERNAL TABLE test007 (rowkey string,name string,age string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,Info:name,Info:age")
TBLPROPERTIES ("hbase.table.name" = "test007");
- 第一行是数创建表及属性,这个rowkey是必须要写的,其他字段及类型加在key的后边,这里定义的是hive的字段及类型
- 第二行是固定写法
- 第三行是每个字段与Hbase中的映射关系 , 等号前边是固定写法 , 后边冒号前边为列族名 , 后边为列名
- 第四行等号左边是固定写法 , 右边为Hbase中的表名
EXTERNAL关键字建立的就是外部表,如果Hbase中已经存在了test007这个表不加这个关键字会报错
我们关联表建好后可以进行查询
select * from test007;
到这里说明我们完成了Hive的所有安装步骤 , 可以正常使用
将Hive以服务形式后台启动
我们刚刚成功安装了Hive , 但是只能在黑框框里面命令行形式操作 , 实际运用中我们需要像mysql一样连接做一些操作 , 接下载我们就修改一下Hive 的配置达到我们的目的
添加如下配置
<property>
<name>hive.server2.enable.doAs</name>
<value>false</value>
<description>
Setting this property to true will have HiveServer2 execute
Hive operations as the user making the calls to it.
</description>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>123.456.789.111</value>
<description>Hive所在服务器地址</description>
</property>
<property>
<name>hive.server2.thrift.port</name>
<value>1234</value>
<description>监听一个端口</description>
</property>
启动Hive元数据库
hive --service metastore &
开启hiveserver2服务
hive --service hiveserver2 &
至此Hive以服务形式启动
使用beeline方式连接
执行命令
beeline
再执行
!connect jdbc:hive2://123.456.789.111:1234
之后会提示输入账号密码默认账号是root密码是没有的可以直接回车
使用DBeaver可视化工具链接Hive
下载DBeaver , 下载地址 : https://dbeaver.io/download/ 安装成功后打开如下界面
新建连接 , 选择hive
添加对应信息
我们将Hive目录下的jdbc目录中的hive-jdbc-2.3.9-standalone.jar下载下来 , 在编辑驱动设置中添加进去
配置完成后我们打开操作类似于Navicat , 找到我们的库和表打开就可以看到我们的数据了
JAVA使用JDBC连接Hive
java使用起来也是非常的简单的
pom导入依赖:
<dependency>
<groupId>org.apache.hive</groupId>
<artifactId>hive-jdbc</artifactId>
<version>2.3.9</version>
</dependency>
版本和安装的Hive尽量一致
代码:
package com.dataojo.testdemo.hive;
import java.sql.*;
/**
* @author Tianyu
* @date 2021/11/4 10:10
* @desc HiveDemo
*/
public class HiveDemo {
private static String driveName = "org.apache.hive.jdbc.HiveDriver";
private static String ip = "123.456.789.111";
private static String prot = "1234";
private static String lib = "hive_test";
private static String username = "root";
private static String password = "";
private static Connection con = null;
static {
try {
Class.forName(driveName);
con = DriverManager.getConnection("jdbc:hive2://" + ip + ":" + prot + "/" + lib, username, password);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void main(String[] args) {
ResultSet res = null;
Statement stmt = null;
try {
stmt = con.createStatement();
String sql = "select * from test007";
res = stmt.executeQuery(sql);
while (res.next()) {
System.out.println(res.getString(1) + "\t" + res.getString(2) + "\t" + res.getString(3));
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
if (res != null) {
res.close();
}
if (stmt != null) {
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}