zl程序教程

您现在的位置是:首页 >  数据库

当前栏目

Hive和HBase整合

HBase 整合 hive
2023-09-27 14:21:46 时间

Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。

Hive继承HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive集成HBase需要在Hive表和HBase表之间建立映射关系,也就是Hive表的列和列类型与HBase表的列族及列限定词建立关联。每一个在Hive表中的域都存在与HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的rowkey对应到Hive中为选择一个域使用 :key 来对应,列族(cf:)映射到Hive中的其他所有域,列为(cf:cq)。

下面来简单实战下:

创建HBase表


create user1,{NAME =  info,VERSIONS =  1} 

向user表中插入一些数据


put user1,1,info:name,zhangsan  put user1,1,info:age,25  put user1,2,info:name,lisi  put user1,2,info:age,22  put user1,3,info:name,wangswu  put user1,3,info:age,21 

使用scan命令来查看下user表中的数据


scan user; 

结果如下

ROW COLUMN+CELL

1 column=info:age, timestamp=1476773051604, value=25

1 column=info:name, timestamp=1476773046344, value=zhangsan

2 column=info:age, timestamp=1476773051685, value=22

2 column=info:name, timestamp=1476773051661, value=lisi

3 column=info:age, timestamp=1476773052632, value=21

3 column=info:name, timestamp=1476773051709, value=wangswu

3 row(s) in 0.0610 seconds

创建Hive中与HBase中对应的表


SET hbase.zookeeper.quorum=hadoop001;  SET zookeeper.znode.parent=/hbase;  ADD jar /opt/bigdata/hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar;  // user1表  CREATE EXTERNAL TABLE user1 (  rowkey string,  info map STRING,STRING   ) STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler  WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:")  TBLPROPERTIES ("hbase.table.name" = "user1");  // user2表  CREATE EXTERNAL TABLE user2 (  rowkey string,  name string,  age int  ) STORED BY org.apache.hadoop.hive.hbase.HBaseStorageHandler  WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age")  TBLPROPERTIES ("hbase.table.name" = "user2"); 

查询user1,user2表数据

查询user1表数据


select * from user1; 

结果如下


1       {"age":"25","name":"zhangsan"}  2       {"age":"22","name":"lisi"}  3       {"age":"21","name":"wangswu"}  Time taken: 0.467 seconds, Fetched: 3 row(s) 

查询user2表数据


select * from user2; 

结果如下:


1 zhangsan 25  2 lisi 22  3 wangswu 21  Time taken: 0.087 seconds, Fetched: 3 row(s) 

hive插入数据到hbase


INSERT INTO TABLE user1  SELECT 4 AS rowkey,  map(name,lijin,age,22) AS info  from dual limit 1; 


本文作者:佚名

来源:51CTO


hbase的表映射到hive中 1.本文主要说一下怎么把hbase中的表映射到hive中,说之前我们先简单说一下hive的内部表和外部表的区别; (1),被external关键字修饰的表是外部表,没有被external关键字修饰的表是内部表. (2),内部表数据由Hive自身管理,外部表数据由HDFS管理. (3),内部表数据存储的位置是hive.metastore.warehouse.dir.外部表数据的存储位置由自己确定. (4),删除内部表会直接删除元数据(metadata)及存储数据;删除外部表仅仅会删除元数据,HDFS上的文件并不会被删除;
第十二届 BigData NoSQL Meetup — 基于hbase的New sql落地实践 立即下载