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檔案...