1. 程式人生 > >hbase和hive整合實戰

hbase和hive整合實戰

hbase表對映到hive表中

1 在hbase中建立表:

表名hbase_test, 有三個列族 f1、f2、f3

create 'hbase_test',{NAME => 'f1',VERSIONS => 1},{NAME => 'f2',VERSIONS => 1},{NAME => 'f3',VERSIONS => 1}

2 插入資料

put 'hbase_test','r1','f1:name','zhangsan'
put 'hbase_test','r1','f2:age','20'
put 'hbase_test','r1','f3:sex','male'
put 'hbase_test','r2','f1:name','lisi'
put 'hbase_test','r2','f2:age','30'
put 'hbase_test','r2','f3:sex','female'
put 'hbase_test','r3','f1:name','wangwu'
put 'hbase_test','r3','f2:age','40'
put 'hbase_test','r3','f3:sex','male'

3 查詢資料

可正常查詢。

4 建立基於hbase的hive表

CREATE EXTERNAL TABLE hiveFromHbase(
rowkey1 string,
f1 map<STRING,STRING>,
f2 map<STRING,STRING>,
f3 map<STRING,STRING>
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:,f2:,f3:")
TBLPROPERTIES ("hbase.table.name" = "hbase_test");

這裡使用外部表EXTERNAL TABLE對映到HBase中的表,這樣,在Hive中刪除表,並不會刪除HBase中的表,否則,就會刪除。另外,除了rowkey,其他三個欄位使用Map結構來儲存HBase中的每一個列族。

  • hbase.columns.mapping
    Hive表和HBase表的欄位對映關係,分別為:Hive表中第一個欄位對映:key(rowkey),第二個欄位對映列族f1,第三個欄位對映列族f2,第四個欄位對映列族f3

5 hive中查詢hbase表

可以看到,Hive中有3行資料,因為有3個rowkey,每一個列族的列和值,分別被儲存到Map結構中

6 Hive中插入資料到HBase表

insert into table hiveFromHbase
SELECT 'r4' AS rowkey,
map('name','zhaoliu') AS f1,
map('age','50') AS f2,
map('sex','male') AS f3
from person limit 1;

插入成功後檢視2張表的資料
資料均有插入。

Hive中的外部表hiveFromHbase,就和其他外部表一樣,只有一份元資料,真正的資料是在HBase表中,Hive通過hive-hbase-handler來操作HBase中的表。

hive表對映到hbase表中

1 建立對映hbase的表

create   table hive_test(
id string,
name string,
age int,
address string
)STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f2:age,f3:address")
TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive");

在hive1.2.1 跟hbase 0.98整合時,需要新增:
“hbase.mapred.output.outputtable” = “hbaseFromhive” 表屬性
TBLPROPERTIES (“hbase.table.name” = “hbaseFromhive”,“hbase.mapred.output.outputtable”=“hbaseFromhive”);
如果不新增會報錯:Must specify table name

2 檢視hbase對映表是否產生

list

3 檢視hbase對映表的表結構和資料

由於hive表中沒有載入資料,此時hbase中對映的表也無資料
desc “hbaseFromhive”

4 Hive表載入資料

資料來源於另一張表hive_source;
載入資料:
insert overwrite table hive_test select * from hive_source;

5 檢視hive和hbase中表的資料

對映表可以檢視到hive表中的資料。