hive與hbase整合
Hive整合HBase原理
Hive與HBase整合的實現是利用兩者本身對外的API介面互相通訊來完成的,其具體工作交由Hive的lib目錄中的hive-hbase-handler-*.jar工具類來實現,通訊原理如下圖所示。
Hive整合HBase後的使用場景:
(一)通過Hive把資料載入到HBase中,資料來源可以是檔案也可以是Hive中的表。
(二)通過整合,讓HBase支援JOIN、GROUP等SQL查詢語法。
(三)通過整合,不僅可完成HBase的資料實時查詢,也可以使用Hive查詢HBase中的資料完成複雜的資料分析。
Hive整合HBase配置
1 Hive對映HBase表
// 如果hbase是叢集,需要修改hive-site.xml檔案配置
$ vim hive-site.xml
- <property>
- <name>hbase.zookeeper.quorum</name>
- <value>node1,node2,node3</value>
- </property>
// 將hbase lib目錄下的所有檔案複製到hive lib目錄中
$ cd app/hive-1.1.0-cdh5.7.1/
$ cp ~/app/hbase-1.2.0-cdh5.7.1/lib/* lib/
// 在hive中建立對映表
$ hive shell
> create table hive_hbase_test(key int,value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cf1:val") tblproperties("hbase.table.name"="hive_hbase_test");
備註:在hive中建立表hive_hbase_test,這個表包括兩個欄位(int型的key和string型的value),對映為hbase中的表hive_hbase_test,key對應hbase的rowkey,value對應hbase的cf1:val列。
// 在hbase中檢視是否存在對映表
$ hbase shell
> list
2 整合後功能測試
// 建立測試資料
$ vim poke.txt
1 zhangsan
2 lisi
3 wangwu
// 在hive中建立一個poke表並載入測試資料
> create table poke(key int,valuestring) row format delimited fields terminated by '\t';
> load data local inpath '/home/developer/poke.txt' overwrite into table poke;
> select * from poke;
// 將hive的poke表中的資料載入到hive_hbase_test表
> insert overwrite table hive_hbase_test select * from poke;
> select * from hive_hbase_test;
// 檢視hbase的hive_hbase_test表中是否有同樣的資料
> scan 'hive_hbase_test'
需要說明以下幾點:
(一)Hive對映表的欄位是HBase表字段的子集。整合之後的Hive表不能被修改。
(二)Hive中的對映表不能直接插入資料,所以需要通過將資料載入到另一張poke表,然後通過查詢poke表將資料載入到對映表。
(三)上述示例是通過建立內部表的方式將Hive表對映到HBase表,HBase表會自動建立,而且Hive表被刪除後HBase表也會自動刪除。
(四)如果HBase表已有資料,可以通過建立Hive外部表的方式將Hive表對映到HBase表,通過HQLHive表實現對HBase表的資料分析。Hive表刪除將不會對HBase表造成影響。建立外部表的方法如下:
> create external table hive_hbase_test(key int,value string) stored by 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' with serdeproperties("hbase.columns.mapping"=":key,cf1:val") tblproperties("hbase.table.name"="hive_hbase_test");