Hive 操作 Hbase 外部表
更新时间:2023-10-07
本示例使用 BMR-2.3.0(Hadoop: 3.1.1, Hive:3.1.0, HBASE: 2.2.7)来演示 Hive 操作 Hbase 外部表。其他版本操作应该类似。
1. 创建 Hbase 表
hbase shell
创建 hbase 表 hbase_hive_table。
hbase(main):004:0> create 'hbase_hive_table', 'cf'
Created table hbase_hive_table
Took 1.3137 seconds
2. Hive 操作
进入 hive 环境
hive
- 设置引擎为 mr MapReduce 引擎 和本集群的 Hbase 环境已经调好,如果使用其他集群的 Hbase,可以用 add file hbase-site.xml 添加其他集群的配置文件(需要服务器打通)。TEZ 引擎需要额外的 Hbase 相关的配置,需使用 add jar 的方式把 hbase 的相关 jar 包放到执行环境里。
set hive.execution.engine=mr;
- 创建外部表
CREATE EXTERNAL TABLE hbase_hive_table (key int, value string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf:val")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive_table", "hbase.mapred.output.outputtable" = "hbase_hive_table");
- 插入数据
INSERT OVERWRITE TABLE HBASE_HIVE_TABLE values(98, 'abc');
- 检索数据
select * from HBASE_HIVE_TABLE;
OK
98 abc
Time taken: 0.246 seconds, Fetched: 1 row(s)
2.1 Join 测试
- 创建表
create table t1(t1_c1 int, t1_c2 string);
insert into t1 values(1,'t1_key1'),(2,'t1_key2'),(3,'t1_key3');
create table t2(t2_c1 int, t2_c2 string);
insert into t2 values(2,'t2_key2'),(3,'t2_key3'),(4,'t2_key4');
- 插入数据
INSERT OVERWRITE TABLE HBASE_HIVE_TABLE
select t1_c1, concat(t1_c2, t2_c2)
from t1 join t2 on t1_c1 = t2_c1;
- 检索结果
select * from HBASE_HIVE_TABLE;
OK
2 t1_key2t2_key2
3 t1_key3t2_key3
98 abc
Time taken: 0.141