hbase 与 hive的集成示例

对于hbase 与 hive的集成,主要就是依靠两者的API接口进行相互通讯,我们直接来看,主要的两种方式,个人觉得这种功能在实际工作,应该运用的比较少

一、将hive中存在的表映射到hbase中(集成操作都是在hive中进行的)

1、首先我们hive中存在一张有数据的表hbase_hive_empinfo 至于为什么要存在这样一张表后面会说到,

2、我们在hive中来创建一张和hbase有映射关系的表,同是也会在hbase中将这张表创建出来

CREATE TABLE hive_emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive:hive_emp");

"hbase.table.name" = "hbase_hive:hive_emp"   -->这是在hbase中的表的表名    

hbase.columns.mapping" = ":key,info:ename,info:job,info:mgr,info:hiredate,info:sal,info:comm,info:deptno

-->这是表对应的列    默认hive的第一列  映射为hbase表的rowkey

我们来看看创建好的表   ,如下图所示,hbase中的表已经存在了


接下来我们对hive中的表进行数据插入,这时我们要注意,这里不能采用load的方式从文件系统加载数据到hive表中,这个方式是不行的,所以我们提前有一张有数据的表,来对我们的表进行数据插入

insert into table hive_emp select * from hbase_hive_empinfo;        用这种方式对数据进行插入

插入成功之后我们来看看两张表的数据

hive中


hbase中


可以看到两个表都有数据了,可是真正的数据到底存在哪里呢

hbase中的region中是存在数据的,手动flush


再看看hive中,是不存在数据的


这就说明我们第一种映射的数据是存在hbase的region中的,但而且hive表的数据更新,也会同是反映到hbase的表中,比如我们在插入一条数据,麻烦直接插入的同样的数据,

这是之前的


这是hive执行插入数据后的


可以看到 时间戳已经变成最新的了,所以一旦关系建立,可以通过hive来对Hbase的表数据进行更新

二、hbase中已存在的表,将其映射到hive中,

已存在的表  hbase.table.name" = "hbase_hive:emp_info

hive中新建的映射表      hbase_hive_empinfo

create external table hbase_hive_empinfo(
Y1 string,
y2 string,
Y3 string,
Y4 string,
y5 date,
Y6 int,
y7 int,
Y8 string
)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:Y1,info:Y2,info:Y3,info:Y4,info:Y5,info:Y6,info:Y7")
TBLPROPERTIES ("hbase.table.name" = "hbase_hive:emp_info");

这个就很简单了,就可在hive中进行数据的聚合,分析查询,

有两个注意:

        1.如果是hive映射到habse
        删除hive中的表,对应hhbase中的会一起被删除

2.如是hbase映射hive

                 删除hive中的表,是不会影响hbase中的表,这种情况意味着只是hive在habse对应的表中做了一个映射关系而已

阅读更多

没有更多推荐了,返回首页