HIVE與HBase的集成

作用:

  • 將HBase的數據映射到HIVE表中。

HIVE表類型:

  • 管理表:在HIVE表中建表的同時在HBase中不存在該表,HBase創建相同的表·,數據不是在HIVE中而是在HBase中。
  • 外部表:在HIVE中建表,同時HBase的表要提前存在,數據同樣存儲在HBase中。(你創建的外部表的數據來源於HBase中)

框架之間的繼承操作,首先考慮的是jar包:

可以把HIVE集成HBase需要的jar包拷貝到hive lib目錄下面:

1  hbase-server-0.98.6-cdh5.3.6.jar 
2  hbase-client-0.986-cdh5.3.6.jar
3  hbase-potocol-0.98.6-cdh5.3.6.jar 
4  hbase-it-0.98.6-cdh5.3.6.jar
5 hbase-hadoop2-compat-0.98.6-cdh5.3.6.jar 
6 hbase-hadoop-compat-0.98.6-cdh5.3.6.jar
7  high-scale-lib-1.1.1.jar 
8 hbase-common-0.98.6-cdh5.3.6.jar

把以上的jar包拷貝到hive中lib目錄下面。

在HIVE中hive-site.xml文件中配置zookeeper信息

<property>
		  <name>hbase.zookeeper.quorum</name>
		  <value>hh</value>
</property>

創建表

  • 創建內部表:
CREATE TABLE hbase_table_3(key int, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")
TBLPROPERTIES ("hbase.table.name" = "xyz3", "hbase.mapred.output.outputtable" = "xyz3");

以上的方式創建表爲HIVE中的管理表。
特點:HBase中沒有該表的前提下,創建之後,HBase中存在這個表。
在創建之後,需要導入數據,不能用load data local inpath… ,需要跑MR程序,所以要使用insert overwrite,將一張表中的數據加載到HIVE表中,加載後數據也不在HIVE中,而是在HBase中。

  • 創建外部表:
CREATE EXTERNAL TABLE hbase_table_4(key int, value string) 
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")
TBLPROPERTIES("hbase.table.name" = "xyz3", "hbase.mapred.output.outputtable" = "xyz3");

創建之後HBase不存在這張表,這張表是在HIVE中的。
用普通的創建外部表的方式,創建出來的外部表是沒有數據的,因爲你的HIVE中的數據存放在HBase中而不是在HIVE中。

內部表 與外部表的區別?

內部表: 刪除表 對應的數據文件會被刪除
外部表: 刪除表 對應的數據文件不會被刪除

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章