说明:采用阿里hbase与自己的hive做集成,非使用阿里HBASE的请忽略。
第一种:建立 Hive 内部表并自动生成Hbase表
目标:建立 Hive 表,关联 HBase 表,插入数据到 Hive 表的同时能够影响 HBase 表。
进入hive -e
hive>set hbase.zookeeper.quorum=ld-xxx.hbaseue.rds.aliyuncs.com:30020;
hive>set hbase.client.username=xxx;
hive>set hbase.client.password=xxxx;
hive>set hbase.client.connection.impl=org.apache.hadoop.hbase.client.AliHBaseUEClusterConnection;
1> 在 Hive 中创建表同时关联 HBase
CREATE TABLE hive_hbase_table(key int, name string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name")
TBLPROPERTIES ("hbase.table.name" = "zm_uat_bd_test:hive_hbase_table", "hbase.mapred.output.outputtable" = "zm_uat_bd_test:hive_hbase_table");
提示:完成之后,可以分别进入 Hive 和 HBase 查看,都生成了对应的表
(2) 在 Hive 中创建临时中间表,用于 load 文件中的数据
提示:不能将数据直接 load 进 Hive 所关联 HBase 的那张表中
CREATE TABLE emp( key int,name string ) row format delimited fields terminated by '\t';
(3) 向 Hive 中间表中 load 数据
hive> load data local inpath '/home/admin/softwares/data/emp.txt' into table emp;
(4) 通过 insert 命令将中间表中的数据导入到 Hive 关联 Hbase 的那张表中
hive> insert into table hive_hbase_table select * from emp;
(5) 查看 Hive 以及关联的 HBase 表中是否已经成功的同步插入了数据
Hive:
hive> select * from hive_hbase_emp_table;
HBase:
Hbase> scan ‘hbase_emp_table’
第二种:关联已经存在的Hbase表
注:联系大数据运维创建namespace、table,以及对应的账号密码并且赋权
目标:在 HBase 中已经存储了某一张表 hbase_emp_table,然后在 Hive 中创建一个外部表来关联 HBase 中的 hbase_emp_table 这张表,使之可以借助 Hive 来分析 HBase 这张表中的数据。
(1) 在 Hive 中创建外部表
CREATE EXTERNAL TABLE relevance_hive_hbase_table(
key int,
name string)
STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name")
TBLPROPERTIES ("hbase.table.name" = "zm_uat_bd_test:hive_hbase_table");
(2) 关联后就可以使用 Hive 函数进行一些分析操作了
hive (default)> insert into hive_hbase_table values(214,'bab');
hive (default)> select * from relevance_hbase_emp;
注:为了使用更加规范,没有特殊情况下,主推业务使用方采用第二种方式进行Hbase与hive的集成,因为第一种是和hbase表强相关,删掉hive表hbase表也会被删除。而外部表则不会,公司中建议使用此种。