Hbase: Hadoop database 的简称,是一种 NoSQL 数据库,主要适用于海量明细数据(十亿、百亿)的随机实时存储与查询,如日志明细、交易清单、轨迹行为等
Hive: Hadoop 的数据仓库,通过 HQL 来处理和计算 HDFS 的数据,HQL 将转化为 Mapreduce 来处理数据,适用于离线的批量数据计算。
二者关系: Hive 对 HDFS 上的数据进行清洗、处理和计算后,可将用于海量数据随机查询的查询的数据存入 Hbase。
2. 集成使用Hive 相当于 SQL 引擎,Hbase 相当于数据库!
2.1 环境准备版本说明:
hive:hive-2.3.9
hbase:hbase-2.1.7
如果想要使用 Hive 操作 Hbase,那么 Hive 需要持有操作 Hbase 的相关 Jar 包,所以我们需要将这些 Jar 包复制(或以软连接的形式)到 Hive 环境下。并且还需要操作 Hbase JavaAPI 时,配置 Zookeeper 的相关信息。(十分简单!)
2.1.1 Jar 包准备以下都是用绝对路径:(路径换成自己的)
ln -s /opt/hbase-2.1.7/lib/hbase-common-2.1.7.jar /opt/hive-2.3.9/lib/ ln -s /opt/hbase-2.1.7/lib/hbase-server-2.1.7.jar /opt/hive-2.3.9/lib/ ln -s /opt/hbase-2.1.7/lib/hbase-client-2.1.7.jar /opt/hive-2.3.9/lib/ ln -s /opt/hbase-2.1.7/lib/hbase-protocol-2.1.7.jar /opt/hive-2.3.9/lib/ ln -s /opt/hbase-2.1.7/lib/hbase-it-2.1.7.jar /opt/hive-2.3.9/lib/ ln -s /opt/hbase-2.1.7/lib/hbase-hadoop2-compat-2.1.7.jar /opt/hive-2.3.9/lib/2.1.2 修改配置文件
修改 Hive 的配置文件 hive-site.xml,添加如下内容:(主机名换成自己的)
2.2 使用hive.zookeeper.quorum node1,node2,node3 hive.zookeeper.client.port 2181
创建一张表并添加数据试试!
2.2.1 建表进入 Hive 的客户端,插入一张表 hive_hbase_stu01_table:
create table hive_hbase_stu01_table(
id int,
name string)
stored by 'org.apache.hadoop.hive.hbase.HbaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = ":key,info:name")
tblproperties ("hbase.table.name" = "hbase_stu01_table");
此时,进入 Hbase ,查看是否存在表 hbase_stu01_table(由于未指定命名空间,则在 default 下):
2.2.2 插入数据insert into table hive_hbase_stu01_table select * from stu01;2.2.3 查询数据
在 Hive 查询该表:
select * from hive_hbase_stu01_table;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-lqY5M5nn-1641302070147)(https://cdn.jsdelivr.net/gh/JOEL-T99/Pic//img/image-20220104204908756.png)]
在 Hbase 中查询该表:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U4vUUEP0-1641302070150)(https://cdn.jsdelivr.net/gh/JOEL-T99/Pic//img/image-20220104205006144.png)]
2.3 使用外部表如果 Hbase 已经存在数据,而需要建立一个 Hive 的关联表时,可在 Hive 上创建一个外部表。
如果 Hbase 中已经存在某张表,再使用上面的方法建表时,就会报错,提示创建外部表!
创建外部表: (只多了一个关键字)
create external table hive_hbase_stu01_table(
id int,
name string)
stored by 'org.apache.hadoop.hive.hbase.HbaseStorageHandler'
with serdeproperties ("hbase.columns.mapping" = ":key,info:name")
tblproperties ("hbase.table.name" = "hbase_stu01_table");
只多了一个关键字 external !
❤️ END ❤️



