活了二十多年,没能为祖国、为人民做点什么,每思及此,伤心欲绝 !

hive关联hbase表

大数据 keguang 166℃ 0评论

Hbase是一种NoSQL数据库,这意味着它不像传统的RDBMS数据库那样支持SQL作为查询语言。一种方法是使用hive关联hbase表,可以完成对hbase表的数据插入(insert)和查询(select)。

新建hive表关联hbase表

hive关联的hbase表,对应的hbase表如果不存在,会自动创建,test是hbase的一个namespace,相当于mysql中的database需要提前建好:create_namespace 'test'

create table if not exists test.test
(
id string comment '用户id',
name string comment '姓名'
)
stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
with serdeproperties("hbase.columns.mapping" = ":key,info:name")
tblproperties("hbase.table.name" = "test:test");

上面的命令创建了一张hive表,跟hbase表是联系在一起的,对应关系:

hive hbase
id :key,即对应hbase表的rowkey
name 对应hbase的info列簇name字段
hive表名:test.test hbase表名:test:test

表名可以不相同的,但是通常为了统一,表命建得相同。

通过hive插入数据到hbase表

如果有这么一个需求,我们想把hive一张结果表存一份数据到hbase,可以使用insert select方式,将hive表的数据插入到hbase表中去。假设现在有一张hive表test.test2

hive> select * from test.test2;
OK
1   tom
2   jack
3   alice

将hive表test.test2的数据导入到hbase表:

insert into test.test select * from test.test2;

这就将数据导入hbase表了,这时候不管是在hive里面,还是hbase shell里面,都是可以直接查询到数据的。

hive> select * from test.test;
OK
1   tom
2   jack
3   alice

从hbase里面scan也是有数据的。

hbase(main):005:0> scan 'test:test'
ROW                              COLUMN+CELL                                                                                
 1                               column=info:name, timestamp=1590221288866, value=tom                                       
 2                               column=info:name, timestamp=1590221288866, value=jack                                      
 3                               column=info:name, timestamp=1590221288866, value=alice                                     

实际数据是存储在hbase数据目录里面的:

[hadoop@slave3 ~]$ hdfs dfs -ls /hbase/data/test/test
Found 3 items
drwxr-xr-x   - hadoop supergroup          0 2020-05-23 16:05 /hbase/data/test/test/.tabledesc
drwxr-xr-x   - hadoop supergroup          0 2020-05-23 16:05 /hbase/data/test/test/.tmp
drwxr-xr-x   - hadoop supergroup          0 2020-05-23 16:05 /hbase/data/test/test/722a0bfced3a534029e5093ebba1d55c
[hadoop@slave3 ~]$ hdfs dfs -ls /user/hive/warehouse/test.db/test

对hbase表做统计查询

有时候我们想对hbase表的数据进行统计分析,可以通过mapreduce / spark API,通过代码逻辑统计分析,但是这些成本有点高,能用sql的尽量用sql做大数据分析,这时候hive关联hbase表查询就派上用场了。

hive> select name, count(1) from test.test group by name;

alice   1
jack    1
tom 1

转载请注明:柯广的博客 » hive关联hbase表

喜欢 (0)or分享 (0)
发表我的评论
取消评论

表情

Hi,您需要填写昵称和邮箱!

  • 昵称 (必填)
  • 邮箱 (必填)
  • 网址