和hbase對映 hbase整合hive

2021-10-14 21:45:54 字數 3562 閱讀 8095

hive提供了與hbase的整合,是的能夠在hbase表上使用hive sql語句進行查詢、插入操作以及進行join和union等複雜查詢、同時也可以將hive表中的資料對映到hbase中。

當我們在使用hive時候,在資料量多的時候就會發現非常的慢,乙個簡單的sql都要半天,其實我們追尋他的原因很簡單,首先他是把sql翻譯成mapreduce來執行,然後mapreduce又是提交給yarn去執行,可以說過程漫長,加上mapreduce本身就足夠慢,所以本文從整合hbase的方面來調優,或者說是加快查詢速度,當然了,最後,還會**如何用sql語言去查詢,畢竟hbase是nosql的。

這個是在hive的使用者說明文件中。

1.修改hive-site.xml檔案,新增配置屬性

hbase.zookeeper.quorum

node1:2181,node2:2181,node3:2181

2.修改hive-env.s**件,新增hbase的依賴包到hive的classpath中。

export hive_classpath=$hive_classpath:/opt/bigdata/hbase/lib/*
注意:1.這裡後面的路徑換成自己的安裝目錄2.hive-env.sh這個檔案不存在,但是存在hive-env.sh-template檔案,複製乙份修改為hive-env.sh即可。

3.使用編譯好的hive-hbase-handler-1.2.1.jar替換hive之前lib目錄下面的該jar包

這裡說的編譯主要是解決hive和hbase不相容的情況下做的,主要是更改pom.xml中的依賴,然後重新編譯一下。如果本身安裝就是相容的版本,這步就可以省略了。

配置完上面的內容,就可以做個實驗來檢查一下了。

1.在hbase中建立一張表

create 'hbase_test','f1','f2','f3'
2.載入資料到hbase_test表中

put 'hbase_test','r1','f1:name','zhangsan'

put 'hbase_test','r1','f2:age','20'

put 'hbase_test','r1','f3:***','male'

put 'hbase_test','r2','f1:name','lisi'

put 'hbase_test','r2','f2:age','30'

put 'hbase_test','r2','f3:***','female'

put 'hbase_test','r3','f1:name','wangwu'

put 'hbase_test','r3','f2:age','40'

put 'hbase_test','r3','f3:***','male'

3.建立基於hbase的hive表

create external table hivefromhbase(

rowkey string,

f1 map,

f2 map,

f3 map) stored by 'org.apache.hadoop.hive.hbase.hbasestoragehandler'

tblproperties ("hbase.table.name" = "hbase_test");

--這裡使用外部表對映到hbase中的表,這樣,在hive中刪除表,並不會刪除hbase中的表,否則,就會刪除。另外,除了rowkey,其他三個字段使用map結構來儲存hbase中的每乙個列族。

hive表和hbase表的字段對映關係,分別為:hive表中第乙個字段對映:key(rowkey),第二個字段對映列族f1,第三個字段對映列族f2,第四個字段對映列族f3

--hbase.table.name

hbase中表的名字

4.檢視hive表中的資料

如果您跟我一樣也看到如此,那說明您搭建成功了,以後就可以仿照這種情況來做了。比如使用hbase來不斷的插入資料,然後遇到比較複雜的sql的查詢的時候

就可以用hive來寫sql做這個事情,相互配合。

1.建立一張對映hbase的表

create  table hive_test(

id string,

name string,

age int,

address string

)stored by 'org.apache.hadoop.hive.hbase.hbasestoragehandler'

tblproperties ("hbase.table.name" = "hbasefromhive");

這裡的hbasefromhive表本身hbase沒有,也是可以的,他會自動在hbase中建立,所以不再需要在hbase中建立了。

2.向hive表中載入資料

這裡有些特殊,向hive表中載入的資料**於另外一張表中。

比如我們建立乙個hive_source表

建表語法:

create table hive_source(

id int,

name string,

age string

address string

)row format delimited fields terminated by 't';

在linux本地建立了乙個order.txt檔案寫入下面這些內容

1       zhang   10      m

2 li 20 f

3 mei 30 m

4 wang 40 f

5 guo 60 m

注意他們之間的間隔用tab來間隔

然後匯入到hive_source表中

load data local inpath 'order.txt' into table hive_source;
檢視是否匯入成功

成功之後匯入到hive_test表中

insert into table hive_test select * from hive_source;
3.在hbase中檢視是否已經有資料了

看到這個說明成功了。

Hive Hive 整合對映 HBase

五 hbase 只提供了簡單的基於 key 值的快速查詢能力,沒法進行大量的條件查詢,對於資料分析來說,不太友好。hive 整合 hbase 為使用者提供一種 sqlonhbase 的方法。hive 與 hbase 整合的實現是利用兩者本身對外的 api 介面互相通訊來完成的,其具體工作交由 hiv...

Hbase和Hive的整合

四 檢驗是否成功 一 為什麼hive要和hbase整合,意義何在?在hbase中不支援複雜查詢,比如join group by count sum hive的資料是無法更新的,除非去更改hdfs的原始檔案,更改原始檔案需要生成乙個新的檔案,十分費事。同時hive是進行海量資料統計分析,無法實時查詢。...

關於spring整合hbase

2.專案中引入spring data hadoop jar包。4.配置xml檔案 配置內容如下所示 xmlns xsi xmlns hdp xsi schemalocation spring hadoop.xsd fs.default.name hdfs zk port 2181 以上就是xml檔案...