Hbase和Hive的整合

2021-09-29 05:05:36 字數 4076 閱讀 6215

四:檢驗是否成功

一:為什麼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...