詳解hbase與hive數(shù)據(jù)同步
hive的表數(shù)據(jù)是可以同步到impala中去的。一般impala是提供實時查詢操作的,像比較耗時的入庫操作我們可以使用hive,然后再將數(shù)據(jù)同步到impala中。另外,我們也可以在hive中創(chuàng)建一張表同時映射hbase中的表,實現(xiàn)數(shù)據(jù)同步。
下面,筆者依次進行介紹。
一、impala與hive的數(shù)據(jù)同步
首先,我們在hive命令行執(zhí)行showdatabases;可以看到有以下幾個數(shù)據(jù)庫:
然后,我們在impala同樣執(zhí)行showdatabases;可以看到:
目前的數(shù)據(jù)庫都是一樣的。
下面,我們在hive里面執(zhí)行create databaseqyk_test;創(chuàng)建一個數(shù)據(jù)庫,如下:
然后,我們使用qyk_test這個數(shù)據(jù)庫創(chuàng)建一張表,執(zhí)行create table user_info(idbigint, account string, name string, age int) row format delimitedfields terminated by ‘\t';如下:
此時,我們已經(jīng)在hive這邊創(chuàng)建好了,然后直接在impala這邊執(zhí)行showdatabases;可以看到:
連qyk_test這個數(shù)據(jù)庫都沒有。
接下來,我們在impala執(zhí)行INVALIDATEMETADATA;然后再查詢可以看到:
數(shù)據(jù)庫和表都會同步過來。
好了,筆者來做個總結(jié):
如果在hive里面做了新增、刪除數(shù)據(jù)庫、表或者數(shù)據(jù)等更新操作,需要執(zhí)行在impala里面執(zhí)行INVALIDATEMETADATA;命令才能將hive的數(shù)據(jù)同步impala;
如果直接在impala里面新增、刪除數(shù)據(jù)庫、表或者數(shù)據(jù),會自動同步到hive,無需執(zhí)行任何命令。
二、hive與hbase的數(shù)據(jù)同步
首先,我們在hbase中創(chuàng)建一張表create ‘user_sysc', {NAME =>‘info'},然后,我們在hive中執(zhí)行
CREATEEXTERNALTABLEuser_sysc(keyint,valuestring)ROWFORMATSERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe' STORED BY'org.apache.hadoop.hive.hbase.HBaseStorageHandler' WITHSERDEPROPERTIES( 'serialization.format'='\t','hbase.columns.mapping'=':key,info:value','field.delim'='\t') TBLPROPERTIES ('hbase.table.name'='user_sysc')
創(chuàng)建一張外部表指向hbase中的表,然后,我們在hive執(zhí)行insert into tableuser_sysc select id,name fromuser_info;入一步份數(shù)據(jù)到user_sysc可以看到:
然后,我們在hbase里面執(zhí)行scan‘user_sysc'可以看到:
接下來,我們在hbase里面執(zhí)行deleteall ‘user_sysc',‘11'刪掉一條數(shù)據(jù),如下:
然后,我在hive里面查詢看看,如下:
說明自動同步過來了。因此,只要創(chuàng)建hive表時,與hbase中的表做了映射,表名和字段名可以不一致,之后無論在hbase中新增刪除數(shù)據(jù)還是在hive中,都會自動同步。
如果在hive里面是創(chuàng)建的外部表需要在hbase中先創(chuàng)建,內(nèi)部表則會在hbase中自動創(chuàng)建指定的表名。
因為hive不支持刪除等操作,而hbase里面比較方便,所以我們可以采用這種方式。
相關(guān)文章
十分簡單易懂的Java應(yīng)用程序性能調(diào)優(yōu)技巧分享
這篇文章主要介紹了十分簡單易懂的Java性能調(diào)優(yōu)技巧分享,具有一定參考價值,需要的朋友可以了解下。2017-11-11