HBase数据迁移至Hive
背景:需要将HBase中表xyz(列簇cf1,列val)迁移至Hive
1. 建立Hive和HBase的映射关系
1.1 运行hive shell进入hive命令行模式,运行如下脚本
CREATE EXTERNAL TABLE hbase_student(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_student:> show tables
在hbase中查看xyz表:> list

2. 插入数据测试
2.1 在HBase端xyz表插入数据,并查看:
查看表结构:desc ‘xyz’
Hbase表插入一条数据:put ‘xyz’,’0’,’cf1:val’,’lowi’
查看表中的数据:scan ‘xyz’

2.1.1 在Hive中的hbase_table_1表查看:select * from hbase_student;

2.2 在Hive端hbase_table_1表插入数据,并查看:
Hive表插入一条数据:insert into hbase_student values (‘1’,’lojun’);
查看数据:select * from hbase_student;

2.2.1 在HBase中的xyz表查看:scan ‘xyz’

3.删除hive表:hive> DROP TABLE IF EXISTS hbase_student;

此时hive表已经删除成功,再去查hbase表’xyz’,发现也已经被删除:

这个问题与hive、hbase表关联的方式有关:
(1)创建hive表无EXTERNAL
CREATE TABLE hbase_student(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");
这种情况是hbase本来没有这张表。hive建表时创建了hbase表。这种情况下,hdfs的hive表目录有hive文件夹,但是里面没有数据(数据是存在hbase里面的)。
当hive使用overwrite关键字进行插入数据时。原本数据不会被删除,有同样的行健会被更新覆盖。因为数据是存在hbase中的,遵守hbase插入数据的规则。
1)当hive删除hive表时,hbase表也会删除。
2)当先删除hbase的时候,先disabled table,然后drop table;
hbase表就被删除了,zookeeper里面也就删除了;
但是hive里面还在,用show tables还能查出来,mysql中TBLS里面还有hive表的信息。但是用select * from hive 查询的时候报错,表不存在(TableNotFoundException)。
然后删除hive里面的表的时候会报错TableNotFoundException)。继续show tables时,发现表已经不在了。TBLS里面也没有hive表了。
(1)EXTERNAL
CREATE EXTERNAL TABLE hbase_student(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");
这种情况是hbase里面已经有这张表了,创建一个hive表去管理这hbase表。
当hive使用overwrite关键字进行插入数据时。跟第一种情况一样。
1)删除hive表对hbase没有影响;
2)但是先删除hbase表hive就会报TableNotFoundException;但是删除hive不会报上面这个错。
HBase数据迁移至Hive的更多相关文章
- Hive及HBase数据迁移
一. Hive数据迁移 场景:两个Hadoop平台集群之间Hive表迁移. 基本思路:Hive表元数据和文件数据export到HDFS文件,通过Distcp将HDFS迁移到另一个集群的HDFS文件,再 ...
- HBase 数据迁移方案介绍
一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...
- HBase 数据迁移方案介绍 (转载)
原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...
- 4.HBASE数据迁移方案(之snapshot):
4.HBASE数据迁移方案: 4.1 Import/Export 4.2 distcp 4.3 CopyTable 4.4 snapshot 快照方式迁移(以USER_info:user_lo ...
- HBase 数据迁移
最近两年负责 HBase,经常被问到一些问题, 本着吸引一些粉丝.普及一点HBase 知识.服务一点阅读人群的目的,就先从 HBase 日常使用写起,后续逐渐深入数据设计.集群规划.性能调优.内核源码 ...
- HBase 数据迁移方案介绍(转载)
原文链接:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...
- HBase数据迁移到Kafka实战
1.概述 在实际的应用场景中,数据存储在HBase集群中,但是由于一些特殊的原因,需要将数据从HBase迁移到Kafka.正常情况下,一般都是源数据到Kafka,再有消费者处理数据,将数据写入HBas ...
- 伪分布式hbase数据迁移汇总
https://www.jianshu.com/p/990bb550be3b hbase0.94.11(hadoop为1.1.2,此电脑ip为172.19.32.128)向hbase1.1.2 (ha ...
- ambari之hbase数据迁移
一.hbase原理剖析 Base是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...
随机推荐
- hdu 4676 Sum Of Gcd 莫队+phi反演
Sum Of Gcd 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=4676 Description Given you a sequence of ...
- Opencv配套的辅助工具Image Watch
1.Image Watch 的下载链接. 2.OpenCV关于Image Watch的介绍页面链接. 3.OpenCV2.4 在线文档关于Image Watch的介绍文档. 4.更详细的信息参见I ...
- mysql慢查询配置
1.慢查询有什么用? 能记录下所有执行超过long_query_time时间的SQL语句, 帮你找到执行慢的SQL, 方便我们对这些SQL进行优化. 2. 如何开启慢查询? 首先我们先查看MYSQL服 ...
- MYSQL-5.5.37-win32.msi 这个版本得程序包谁有吗 可以给我一下吗?
之前下载了这个版本得mysql 但是跟服务器链接不上 后来我就卸载了 但由于卸载不干净 现在又删了注册表 好像把这个程序包得什么文件删除了 现在提示配置文件错误 所以有这个程序包得 ...
- python类型比较的3种方式(转)
通过types模块的类成员来判断,其实所有python中的类型都是这个types模块中类型的实例. import types type(x) is types.IntType # 判断是否int 类型 ...
- Oracle 12c on Solaris 10 安装文档
http://www.orasql.com/blog/archives/2013/08/20/12c_solaris.htm
- MVC单元测试,使用Repository模式、Ninject、Moq
本篇使用Repository设计MVC项目,使用Ninject作为DI容器,借助Moq进行单元测试. 模型和EF上下文 模型很简单: public class Foo { public int Id ...
- linux普通用户获取管理员权限
原文:http://www.cnblogs.com/likwo/p/3435404.html 测试环境:CentOS 5.5 1.添加用户,首先用adduser命令添加一个普通用户,命令如下: #ad ...
- Android中的资源与国际化!
Android中的资源与国际化的问题,通常我们新建一个Android工程,目录结构如下图所示: 我们主要看一下layout与values目录,layout里的xml文件的我们应用使用布局的文件,val ...
- 【java】关于Map的排序性的一次使用,有序的Map
关于Map的排序性的一次使用,有序的Map >>>>> hashmap是按key的hash码排序的,而treemap是利用comparator 进行key的自然排序的 / ...