- 安装前准备
- 安装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的配置注释掉或删掉
system:java.io.tmpdir /usr/local/hive/tmp system:user.name /usr javax.jdo.option.ConnectionUserName root 数据库username javax.jdo.option.ConnectionPassword 1234 数据库password javax.jdo.option.ConnectionURL jdbc:mysql://123.456.789.111:1234/hive JDBC元存储的JDBC连接字符串 javax.jdo.option.ConnectionDriverName com.mysql.cj.jdbc.Driver JDBC驱动类名
我们在建表时可能会出现奇奇怪怪的异常 , 建议在配置文件中添加如下配置 , 使其Hbase , ZK的链接使用我们安装好的Hbase和ZK中的链接
hive.aux.jars.path 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
配置好后下载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 , 但是只能在黑框框里面命令行形式操作 , 实际运用中我们需要像mysql一样连接做一些操作 , 接下载我们就修改一下Hive 的配置达到我们的目的
添加如下配置
hive.server2.enable.doAs false Setting this property to true will have HiveServer2 execute Hive operations as the user making the calls to it. hive.server2.thrift.bind.host 123.456.789.111 Hive所在服务器地址 hive.server2.thrift.port 1234 监听一个端口
启动Hive元数据库
hive --service metastore &
开启hiveserver2服务
hive --service hiveserver2 &
至此Hive以服务形式启动
使用beeline方式连接执行命令
beeline
再执行
!connect jdbc:hive2://123.456.789.111:1234
之后会提示输入账号密码默认账号是root密码是没有的可以直接回车
下载DBeaver , 下载地址 : https://dbeaver.io/download/
安装成功后打开如下界面
新建连接 , 选择hive
添加对应信息
我们将Hive目录下的jdbc目录中的hive-jdbc-2.3.9-standalone.jar下载下来 , 在编辑驱动设置中添加进去
配置完成后我们打开操作类似于Navicat , 找到我们的库和表打开就可以看到我们的数据了
java使用起来也是非常的简单的
pom导入依赖:
org.apache.hive hive-jdbc 2.3.9
版本和安装的Hive尽量一致
代码:
package com.dataojo.testdemo.hive;
import java.sql.*;
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();
}
}
}
}



