五、**
hbase 只提供了簡單的基於 key 值的快速查詢能力,沒法進行大量的條件查詢,對於資料分析來說,不太友好。
hive 整合 hbase 為使用者提供一種 sqlonhbase 的方法。hive 與 hbase 整合的實現是利用兩者本身對外的 api 介面互相通訊來完成的,其具體工作交由 hive 的 lib 目錄中的 hive-hbase-handler-***.jar 工具類來實現對 hbase 資料的讀取。
每乙個在 hive 表中的域都存在於 hbase 中,而在 hive 表中不需要包含所有hbase 中的列。hbase 中的 rowkey 對應到 hive 中為選擇乙個域使用 :key 來對應,列族(cf:)對映到 hive 中的其它所有域,列為(cf:cq)。
);引數解釋:
定義 hive 表中的字段與 hbase 的列族對映
hbase.table.name:
可選引數,僅當使用者想在 hive 和 hbase 中使用不同表名時才需要填寫。
hbase.mapred.output.outputtable:
可選引數,僅當想往這個表中插入資料時使用(在hbase.mapreduce.tableoutputformat 中使用到)
stored by 『org.apache.hadoop.hive.hbase.hbasestoragehandler』:
指定處理的儲存器,就是 hive-hbase-handler-*.jar 包,要做 hive 和 hbase 的整合必須要加上這一句
在 hive 中執行該語句後,hbase 會相應建立表,可以用list
命令檢視下。
往 hive 中插入資料:
insert overwrite table hive_people select
*from people where age =
17;
hive 會觸發 map 任務,執行結束後在 hive 和 hbase 中都可以查詢到資料。就不具體展示了。
在 hive 中建立 hbase 的外部對映表,只在 hive 端執行建表操作,要求 hbase 端的表事先存在。hive 端執行表刪除操作時,只會刪除 hive 端的外部對映表,對 hbase 中被對映的表無影響。
所以先在 hbase 中建一張 t_employee_info 表,新增兩個列族 st1,st2 :
create
't_employee_info'
,'st1'
,'st2'
對於在 hbase 已經存在的表,在 hive 中使用 createexternaltable 來建立聯絡。
create external table t_employee_info(id int
,age int
,*** string)
stored by
'org.apache.hadoop.hive.hbase.hbasestoragehandler'
with serdeproperties(
=":key,st1:age,st2:***"
)tblproperties(
"hbase.table.name"
="t_employee_info"
);
然後往 hbase 的 t_employee_info 中新增資料:
put 't_employee_info','1001','st2:***','man'
put 't_employee_info','1001','st1:age','32'
put 't_employee_info','1002','st1:age','25'
put 't_employee_info','1002','st2:***','woman'
在 hive 中查詢該錶:
hive>
select
*from t_employee_info;
ok1001
32 man
1002
25 woman
注意!注意!注意:在上述示例中,使用的 insert 命令向 hive 表中插入資料。對於批量資料的插入,還是建議使用 load 命令,但對於 hive 外部表來說,不支援 load 命令。可以先建立乙個 hive 內部表,將資料 load 到該表中,最後將查詢內部表的所有資料都插入到與 hbase 關聯的 hive 外部表中,就可以了,相當於中轉一下。
通過 hive 的 map 資料型別對映 hbase 表,這樣每行都可以有不同的列組合,列名與 map中的 key 對應,列值與 map 中的 value 對應 :
create
table hbase_table_1(
value map, row_key int
) stored by
'org.apache.hadoop.hive.hbase.hbasestoragehandler'
with serdeproperties (
="cf:,:key");
insert overwrite table hbase_table_1 select map(bar, foo)
, foo from pokes
where foo=
98or foo=
100;
對 hbase 表進行預分割槽,增大其 mapreduce 作業的並行度
合理的設計 rowkey 使其盡可能的分布在預先分割槽好的 region 上
通過 set hbase.client.scanner.caching 設定合理的掃瞄快取(記憶體未提供資料的情況下掃瞄器下次呼叫時所提取的行數。較高快取值需啟用較快速度的掃瞄器,但這需要更多的記憶體且當快取為空時某些下一次呼叫會執行較長時間 )
如何整合hive和hbase
hive 整合 hbase 詳解
spring 整合 Orika Bean對映框架
前文介紹了orika,本文介紹如何在spring框架中整合使用。package com.mytutorial import org.springframework.stereotype.component component public class extends protected void f...
和hbase對映 hbase整合hive
hive提供了與hbase的整合,是的能夠在hbase表上使用hive sql語句進行查詢 插入操作以及進行join和union等複雜查詢 同時也可以將hive表中的資料對映到hbase中。當我們在使用hive時候,在資料量多的時候就會發現非常的慢,乙個簡單的sql都要半天,其實我們追尋他的原因很簡...
什麼是 物件 關係 對映整合模組
所謂 物件關係對映 詳細一點,是 物件導向程式設計中的 物件 object 和關聯式資料庫的 關係 relation 產生的原因是因為軟體開發已經是物件導向的了。所有的值,操作都是基於物件的概念。而資料庫還是關聯式資料庫。記錄的儲存還是一條一條的。為了在邏輯上使得軟體開發與訪問資料庫保持一致 都按照...