四:檢驗是否成功
一:為什麼hive要和hbase整合,意義何在?
在hbase中不支援複雜查詢,比如join | group by | count | sum
hive的資料是無法更新的,除非去更改hdfs的原始檔案,更改原始檔案需要生成乙個新的檔案,十分費事。同時hive是進行海量資料統計分析,無法實時查詢。 而hbase可以進行資料更新和海量資料的快速查詢.
二:整合原理
hive 與 hbase 利用兩者本身對外的 api 來實現整合,主要是靠 hbasestoragehandler 進 行通訊,利用hbasestorage handler,hive 可以獲取到 hive 表對應的 hbase 表名,列簇以及 列,inputformat 和 outputformat 類,建立和刪除 hbase 表等。
hive 訪問 hbase 中表資料,實質上是通過 mapreduce 讀取 hbase 表資料,其實現是在 mr 中,hivehbasetableinputformat 完成對 hbase 表的切分,獲取 recordreader 物件來讀 取資料。
對 hbase 表的切分原則是乙個 region 切分成乙個 split,即表中有多少個 regions,mr 中就 有多少個 map。
讀取 hbase 表資料都是通過構建 scanner,對錶進行全表掃瞄,如果有過濾條件,則轉化為 filter。當過濾條件為 rowkey 時,則轉化為對 rowkey 的過濾,scanner 通過 rpc 呼叫 regionserver 的 next()來獲取資料
三:整合步驟
將hive和hbase整合(將hbase的四維表轉化為二維表),hive讀取hbase的資料。
在hive中進行整合:
1)新增hbase連線的zk路徑
set hbase.zookeeper.quorum=hadoop01:2181
,hadoop02:2181
,hadoop03:2181
;
2)設定hbase在zk中的訪問路徑
首先檢視下 hbase儲存的相關資料 在zk中的節點
zookeeper.znode.parent<
/name>
<
value
>
/hbase<
/value
>
<
/property>
設定路徑
set zookeeper.znode.parent=
/hbase;
3)新增乙個jar包到hive的classpath路徑下
hive-hbase-handler-2.3.2.jar 是hbase和hive整合的核心包, 解析hbase的資料 到hive中
hive-hbase-handler-2.3.2.jar中關鍵的方法是hbasestoragehandler
2.3.2
-bin/lib/hive-hbase-
handler
-2.3
.2.jar;
list jar;
//檢視是否新增成功
四:檢驗是否成功
1.在hbase中建立表插入資料
create
'mingxing'
,,
put 'mingxing'
,'rk001'
,'base_info:name'
,'huangbo'
put 'mingxing'
,'rk001'
,'base_info:age'
,'33'
put 'mingxing'
,'rk001'
,'extra_info:math'
,'44'
put 'mingxing'
,'rk001'
,'extra_info:province'
,'beijing'
put 'mingxing'
,'rk002'
,'base_info:name'
,'xuzheng'
put 'mingxing'
,'rk002'
,'base_info:age'
,'44'
put 'mingxing'
,'rk003'
,'base_info:name'
,'wangbaoqiang'
put 'mingxing'
,'rk003'
,'base_info:age'
,'55'
put 'mingxing'
,'rk003'
,'base_info:gender'
,'male'
put 'mingxing'
,'rk004'
,'extra_info:math'
,'33'
put 'mingxing'
,'rk004'
,'extra_info:province'
,'tianjin'
put 'mingxing'
,'rk004'
,'extra_info:children'
,'3'
put 'mingxing'
,'rk005'
,'base_info:name'
,'liutao'
put 'mingxing'
,'rk006'
,'extra_info:name'
,'liujialing'
2.在hive中建立表解析hbase中的資料
解析所有的列族資訊:
create external table mingxing(rowkey string, base_info map
, extra_info
map)row format delimited fields
terminated
by'\t'
stored by
'org.apache.hadoop.hive.hbase.hbasestoragehandler'
with serdeproperties (
=":key,base_info:,extra_info:"
) tblproperties (
"hbase.table.name"
="mingxing"
);
檢視表資訊:
select
*from mingxing;
mingxing.rowkey mingxing.base_info mingxing.extra_info
rk001
rk002 {}
rk003 {}
rk004 {}
rk005 {}
rk006 {}
time taken: 9.142 seconds, fetched: 6
row(s)
解析部分列族資訊:
create external table mingxing1(rowkey string, name string, province string)
row format delimited fields
terminated
by'\t'
stored by
'org.apache.hadoop.hive.hbase.hbasestoragehandler'
with serdeproperties (
=":key,base_info:name,extra_info:province"
) tblproperties (
"hbase.table.name"
="mingxing"
);
3.解釋 和hbase對映 hbase整合hive
hive提供了與hbase的整合,是的能夠在hbase表上使用hive sql語句進行查詢 插入操作以及進行join和union等複雜查詢 同時也可以將hive表中的資料對映到hbase中。當我們在使用hive時候,在資料量多的時候就會發現非常的慢,乙個簡單的sql都要半天,其實我們追尋他的原因很簡...
HIVE與HBase的整合
可以把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 ...
Hbase與Hive的整合
環境準備 因為我們後續可能會在操作hive的同時對hbase也會產生影響,所以hive需要持有操作hbase的jar,那麼接下來拷貝hive所依賴的jar包 或者使用軟連線的形式 export hbase home opt module hbase export hive home opt modu...