優雅的將hbase的數據導入hive表


 

 

                   優雅的將hbase的數據導入hive

背景

 

Hive是一個構建在Hadoop基礎設施之上的數據倉庫。通過Hive可以使用HQL語言查詢存放在HDFS上的數據。HQL是一種類SQL語言,這種語言最終被轉化為Map/Reduce.

 

 HBase是一種Key/Value系統,它運行在HDFS之上。和Hive不一樣,Hbase的能夠在它的數據庫上實時運行,而不是運行MapReduce任務。

 

hive幫助熟悉SQL人運行MapReduce任務。因為它是JDBC兼容的,同時,它也能夠和現存的SQL工具整合在一起。HBase通過存儲key/value來工作。它支持四種主要的操作:增加或者更新行,查看一個范圍內的cell,獲取指定的行,刪除指定的行、列或者是列的版本。

 

由於hive目前不支持更新操作(非實時性)。所以在生產環境上不能直接將數據寫入hive表,一般都是先將數據寫到hbase上,而在大數據的計算及統計的時候,hive的讀寫速率大大優於hbase表,在處理大數據時(幾TB的數據量),將會大大的提高挖掘的效率。

所以,比較常規的做法都是在生產環境下,將數據寫入hbase表,再在數據挖掘的時候,將數據導入hive表,進行數據分析統計操作。

那怎么將數據從hbase表轉入hive表里面呢,本文將介紹以下幾種辦法。

 

轉換

hbase的數據轉換成hive,筆者知道的就有以下幾種轉換方式,下面一道來。

創建hive外部關聯表

在創建hive表的時候,指定與hbase某個表做為關聯,如下所示的建表語句

CREATE TABLE hive_table_hbase(key int, value1 string, value2 int, value3 int)   
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler 
WITH SERDEPROPERTIES (  "hbase.columns.mapping"=":key,a:b,a:c,d:e )

TBLPROPERTIES("hbase.table.name" = "some_existing_table");;  

 

上面的語句翻譯為:創建一個hive_table_hbase為名稱的hive表,與hbasesome_existing_table表作關聯,具體關聯方式為字段對應:

 

hive_table_hbas

some_existing_table

key

:key

value1

a:b

value2

a:c

value3

d:e

 

此種關聯的好處是,將hbasehive實時關聯,hbase只要有數據更新,hive表當然就有了更新,不過要說明的時,此時,hive並沒有分配空間去存儲數據,僅僅只是做了一個映射。當然了,在使用大數據分析的時候,效率是很不好的。

 

hbase將數據導入hive

此種實現思路是將hbase表的數據轉成RDD(可查看上篇文章)模型,在將RDD轉成DataFrame模型,注冊Shark臨時表,在就數據一次從臨時表中,導入到hive表中

 

如下所示

<![endif]> <![if !vml]>圓角矩形: Shark臨時表

<![endif]> <![ !>圓角矩形: Hive數據

<!<![if !vml]>圓角矩形: DataFrame

<> ![f圓角矩形: RDD<!圓角矩形: Hbase數據d:e

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

此種轉換,只是在hbase表數據導入到hive表的時候,會花費一定時間,但為后面的密集的hive表查詢,大大增加了效率。

 

 

 

結論

在數據量比較小的時候,比如只有10幾個G以下時,第一種效率比較高,因為沒有轉換的時間,當數據量超過10幾個G后,且后續需要很密集的查詢,當然要選第二種轉換方式,一次轉換,終生無憂!!

極點科技

誠信 專注 創新

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM