HBase数据迁移至Hive

来源:互联网 发布:弄璋乎弄瓦乎 编辑:程序博客网 时间:2024/05/30 23:29
背景:需要将HBase中表xyz(列簇cf1,列val)迁移至Hive

1. 建立Hive和HBase的映射关系

1.1 运行hive shell进入hive命令行模式,运行如下脚本
CREATE EXTERNAL TABLE hbase_table_1(key int, value string) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,cf1:val")TBLPROPERTIES ("hbase.table.name" = "xyz", "hbase.mapred.output.outputtable" = "xyz");

(EXTERNAL表示HBase中已经存在了xyz表;如果HBase中不存在,则去掉EXTERNAL关键字,执行命令后,将会在HBase中创建xyz表)

1.2 在Hive中查看hbase_table_1

这里写图片描述

1.3在HBase中查看xyz

这里写图片描述

2. 插入数据测试

2.1 在HBase端xyz表插入数据

这里写图片描述

2.1.1 在Hive中的hbase_table_1表查看

这里写图片描述

2.2 在Hive端hbase_table_1表插入数据

这里写图片描述

2.2.1 在HBase中的xyz表查看

这里写图片描述

总结
至此其实并没有将HBase的数据迁移到Hive中,或者说是物理迁移(将HBase中的数据拷贝至Hive文件系统,并生成相应文件),只是在Hive中建了一个与HBase表有一一映射的关系表(如果熟悉关系型数据库的,可以把这种映射关系理解为关系型数据库间的DBLink。),通过Hive这个表你可以进行查询、新增,但是不能做修改、删除操作。如下图所示:
这里写图片描述
此时数据只存在于HBase中,从Hive表对应的文件目录中并没有具体文件,就可以得出这个结论。
如果需要真正在Hive中保存有数据,可以通过

create table hbase_table_hive as select * from hbase_table_1;

生成一个新的Hive表,这个表中的数据就存储在Hive文件系统中的。

0 0
原创粉丝点击