天天看點

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

在之前的博文中提到,hive的表資料是能夠同步到impala中去的。

一般impala是提供實時查詢操作的,像比較耗時的入庫操作我們能夠使用hive。然後再将資料同步到impala中。另外,我們也能夠在hive中建立一張表同一時候映射hbase中的表。實作資料同步。

以下。筆者依次進行介紹。

首先,我們在hive指令行運作show databases;能夠看到有以下幾個資料庫:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

然後,我們在impala相同運作show databases;能夠看到:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

眼下的資料庫都是一樣的。

以下,我們在hive裡面運作create database qyk_test;建立一個資料庫,例如以下:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

然後,我們使用qyk_test這個資料庫建立一張表,運作create table user_info(id bigint, account string, name string, age int) row format delimited fields terminated by ‘\t’;例如以下:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

此時。我們已經在hive這邊建立好了,然後直接在impala這邊運作show databases;能夠看到:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

連qyk_test這個資料庫都沒有。

接下來。我們在impala運作INVALIDATE METADATA;然後再查詢能夠看到:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

資料庫和表都會同步過來。

好了,筆者來做個總結:

假設在hive裡面做了新增、删除資料庫、表或者資料等更新操作,須要運作在impala裡面運作INVALIDATE METADATA;指令才幹将hive的資料同步impala。

假設直接在impala裡面新增、删除資料庫、表或者資料。會自己主動同步到hive,無需運作不論什麼指令。

首先,我們在hbase中建立一張表create ‘user_sysc’, {NAME => ‘info’},然後,我們在hive中運作

建立一張外部表指向hbase中的表,然後,我們在hive運作insert into table user_sysc select id,name from user_info;入一步份資料到user_sysc能夠看到:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

然後。我們在hbase裡面運作scan ‘user_sysc’能夠看到:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

接下來,我們在hbase裡面運作deleteall ‘user_sysc’, ‘11’删掉一條資料。例如以下:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

然後。我在hive裡面查詢看看。例如以下:

hadoop生态系統學習之路(八)hbase與hive的資料同步以及hive與impala的資料同步

說明自己主動同步過來了。是以,僅僅要建立hive表時。與hbase中的表做了映射。表名和字段名能夠不一緻,之後不管在hbase中新增删除資料還是在hive中。都會自己主動同步。

假設在hive裡面是建立的外部表須要在hbase中先建立。内部表則會在hbase中自己主動建立指定的表名。

由于hive不支援删除等操作。而hbase裡面比較友善,是以我們能夠採用這樣的方式。