您的位置:首页 > 大数据 > Hadoop

hadoop生态系统学习之路(八)hbase与hive的数据同步以及hive与impala的数据同步

2017-08-02 11:12 726 查看
在之前的博文中提到,hive的表数据是能够同步到impala中去的。

一般impala是提供实时查询操作的,像比較耗时的入库操作我们能够使用hive。然后再将数据同步到impala中。另外,我们也能够在hive中创建一张表同一时候映射hbase中的表。实现数据同步。

以下。笔者依次进行介绍。

一、impala与hive的数据同步

首先,我们在hive命令行运行show databases;能够看到有以下几个数据库:



然后,我们在impala相同运行show databases;能够看到:



眼下的数据库都是一样的。

以下,我们在hive里面运行create database qyk_test;创建一个数据库,例如以下:



然后,我们使用qyk_test这个数据库创建一张表,运行create table user_info(id bigint, account string, name string, age int) row format delimited fields terminated by ‘\t’;例如以下:



此时。我们已经在hive这边创建好了,然后直接在impala这边运行show databases;能够看到:



连qyk_test这个数据库都没有。

接下来。我们在impala运行INVALIDATE METADATA;然后再查询能够看到:



数据库和表都会同步过来。

好了,笔者来做个总结:

假设在hive里面做了新增、删除数据库、表或者数据等更新操作,须要运行在impala里面运行INVALIDATE METADATA;命令才干将hive的数据同步impala。

假设直接在impala里面新增、删除数据库、表或者数据。会自己主动同步到hive,无需运行不论什么命令。

二、hive与hbase的数据同步

首先,我们在hbase中创建一张表create ‘user_sysc’, {NAME => ‘info’},然后,我们在hive中运行

CREATE EXTERNAL TABLE user_sysc (key int, value string) ROW FORMAT SERDE 'org.apache.hadoop.hive.hbase.HBaseSerDe'
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ( 'serialization.format'='\t', 'hbase.columns.mapping'=':key,info:value', 'field.delim'='\t')
TBLPROPERTIES ('hbase.table.name'='user_sysc')


创建一张外部表指向hbase中的表,然后,我们在hive运行insert into table user_sysc select id,name from user_info;入一步份数据到user_sysc能够看到:



然后。我们在hbase里面运行scan ‘user_sysc’能够看到:



接下来,我们在hbase里面运行deleteall ‘user_sysc’, ‘11’删掉一条数据。例如以下:



然后。我在hive里面查询看看。例如以下:



说明自己主动同步过来了。因此,仅仅要创建hive表时。与hbase中的表做了映射。表名和字段名能够不一致,之后不管在hbase中新增删除数据还是在hive中。都会自己主动同步。

假设在hive里面是创建的外部表须要在hbase中先创建。内部表则会在hbase中自己主动创建指定的表名。

由于hive不支持删除等操作。而hbase里面比較方便,所以我们能够採用这样的方式。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐