Hbase是被設(shè)計(jì)用來做K-V查詢,但有時候也會遇到基于Hbase表的復(fù)雜統(tǒng)計(jì),寫MR很不方便。hive考慮到這一點(diǎn),提供了操作Hbase表的接口。hive讀取Hbase表,通過MR最終使用HiveHbaseTableInputFormat來讀取數(shù)據(jù),在getSplit()方法中對Hbase進(jìn)行切分,切分原則是根據(jù)該表對應(yīng)的Hregion,將每個region作為一個InputSplit,即該表有多少個region就有多少個map task;
每個region的大小由參數(shù)hbase.hregion.max.filesize控制,默認(rèn)10G,這樣會使得每個map task處理的數(shù)據(jù)文件太大,map task性能自然很差;
為Hregion表預(yù)分配region,使得每個region的大小在合理的范圍;
實(shí)際操作
--在hive中新建一個外部表,
create external table h_table(id string, col1 string, age int,col2 string)
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
--映射關(guān)系,id=:key;col1=f1:col1;age=f1:age;col2=f1:col2
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:col1,f1:age,f1:col2")
TBLPROPERTIES("hbase.table.name" = "table1");
另外hbase還可以對接到