hive關(guān)聯(lián)hbase表
Hive系列文章
- Hive表的基本操作
- Hive中的集合數(shù)據(jù)類型
- Hive動態(tài)分區(qū)詳解
- hive中orc格式表的數(shù)據(jù)導(dǎo)入
- Java通過jdbc連接hive
- 通過HiveServer2訪問Hive
- SpringBoot連接Hive實(shí)現(xiàn)自助取數(shù)
- hive關(guān)聯(lián)hbase表
- Hive udf 使用方法
- Hive基于UDF進(jìn)行文本分詞
- Hive窗口函數(shù)row number的用法
- 數(shù)據(jù)倉庫之拉鏈表
Hbase
是一種NoSQL
數(shù)據(jù)庫,這意味著它不像傳統(tǒng)的RDBMS
數(shù)據(jù)庫那樣支持SQL
作為查詢語言。一種方法是使用hive
關(guān)聯(lián)hbase
表,可以完成對hbase
表的數(shù)據(jù)插入(insert
)和查詢(select
)。
Hive和HBase的通信原理
Hive與HBase整合的實(shí)現(xiàn)是利用兩者本身對外的API接口互相通信來完成的,這種相互通信是通過$HIVE_HOME/lib/hive-hbase-handler-{hive.version}.jar
工具類實(shí)現(xiàn)的。通過HBaseStorageHandler,Hive可以獲取到Hive表所對應(yīng)的HBase表名,列簇和列,InputFormat、OutputFormat類,創(chuàng)建和刪除HBase表等。Hive訪問HBase中表數(shù)據(jù),實(shí)質(zhì)上是通過MapReduce讀取HBase表數(shù)據(jù),其實(shí)現(xiàn)是在MR中,使用HiveHBaseTableInputFormat完成對HBase表的切分,獲取RecordReader對象來讀取數(shù)據(jù)。對HBase表的切分原則是一個Region切分成一個Split,即表中有多少個Regions,MR中就有多少個Map;讀取HBase表數(shù)據(jù)都是通過構(gòu)建Scanner,對表進(jìn)行全表掃描,如果有過濾條件,則轉(zhuǎn)化為Filter。當(dāng)過濾條件為rowkey時,則轉(zhuǎn)化為對rowkey的過濾;Scanner通過RPC調(diào)用RegionServer的next()來獲取數(shù)據(jù);
基本通信原理如下:
新建hive表關(guān)聯(lián)hbase表
hive關(guān)聯(lián)的hbase表,對應(yīng)的hbase表如果不存在,會自動創(chuàng)建,test是hbase的一個namespace,相當(dāng)于mysql中的database需要提前建好:create_namespace 'test'
。
上面的命令創(chuàng)建了一張hive表,跟hbase表是聯(lián)系在一起的,對應(yīng)關(guān)系:
表名可以不相同的,但是通常為了統(tǒng)一,表命建得相同。
通過hive插入數(shù)據(jù)到hbase表
如果有這么一個需求,我們想把hive一張結(jié)果表存一份數(shù)據(jù)到hbase,可以使用insert select方式,將hive表的數(shù)據(jù)插入到hbase表中去。假設(shè)現(xiàn)在有一張hive表test.test2
:
將hive表test.test2的數(shù)據(jù)導(dǎo)入到hbase表:
這就將數(shù)據(jù)導(dǎo)入hbase表了,這時候不管是在hive里面,還是hbase shell里面,都是可以直接查詢到數(shù)據(jù)的。
從hbase里面scan也是有數(shù)據(jù)的。
實(shí)際數(shù)據(jù)是存儲在hbase數(shù)據(jù)目錄里面的:
對hbase表做統(tǒng)計(jì)查詢
有時候我們想對hbase表的數(shù)據(jù)進(jìn)行統(tǒng)計(jì)分析,可以通過mapreduce / spark API,通過代碼邏輯統(tǒng)計(jì)分析,但是這些成本有點(diǎn)高,能用sql的盡量用sql做大數(shù)據(jù)分析,這時候hive關(guān)聯(lián)hbase表查詢就派上用場了。
hive> select name, count(1) from test.test group by name;
alice 1
jack 1
tom 1
作者:柯廣的網(wǎng)絡(luò)日志
微信公眾號:Java大數(shù)據(jù)與數(shù)據(jù)倉庫