背景:需要将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的更多相关文章

  1. Hive及HBase数据迁移

    一. Hive数据迁移 场景:两个Hadoop平台集群之间Hive表迁移. 基本思路:Hive表元数据和文件数据export到HDFS文件,通过Distcp将HDFS迁移到另一个集群的HDFS文件,再 ...

  2. HBase 数据迁移方案介绍

    一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分为以下几类: 图1.HBase数据迁移方案 从上面图中可看出,目前的方案主要有四类,Hadoop层有一类,HBase层有三类.下 ...

  3. HBase 数据迁移方案介绍 (转载)

    原文地址:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  4. 4.HBASE数据迁移方案(之snapshot):

    4.HBASE数据迁移方案:  4.1 Import/Export  4.2 distcp  4.3 CopyTable  4.4 snapshot 快照方式迁移(以USER_info:user_lo ...

  5. HBase 数据迁移

    最近两年负责 HBase,经常被问到一些问题, 本着吸引一些粉丝.普及一点HBase 知识.服务一点阅读人群的目的,就先从 HBase 日常使用写起,后续逐渐深入数据设计.集群规划.性能调优.内核源码 ...

  6. HBase 数据迁移方案介绍(转载)

    原文链接:https://www.cnblogs.com/ballwql/p/hbase_data_transfer.html 一.前言 HBase数据迁移是很常见的操作,目前业界主要的迁移方式主要分 ...

  7. HBase数据迁移到Kafka实战

    1.概述 在实际的应用场景中,数据存储在HBase集群中,但是由于一些特殊的原因,需要将数据从HBase迁移到Kafka.正常情况下,一般都是源数据到Kafka,再有消费者处理数据,将数据写入HBas ...

  8. 伪分布式hbase数据迁移汇总

    https://www.jianshu.com/p/990bb550be3b hbase0.94.11(hadoop为1.1.2,此电脑ip为172.19.32.128)向hbase1.1.2 (ha ...

  9. ambari之hbase数据迁移

    一.hbase原理剖析 Base是一个构建在HDFS上的分布式列存储系统:HBase是基于Google BigTable模型开发的,典型的key/value系统:HBase是Apache Hadoop ...

随机推荐

  1. Linux性能监控分析命令(五)—free命令介绍

    性能监控分析的命令包括如下:1.vmstat2.sar3.iostat4.top5.free6.uptime7.netstat8.ps9.strace10.lsof 命令介绍:free命令是监控Lin ...

  2. 详解linux中的ps命令

    Linux中的ps命令是Process Status的缩写.ps命令用来列出系统中当前运行的那些进程.ps命令列出的是当前那些进程的快照,就是执行ps命令的那个时刻的那些进程,如果想要动态的显示进程信 ...

  3. window api 监控

    http://pnig0s1992.blog.51cto.com/393390/704189

  4. POJ 3041(最小点覆盖)

    题意: 假如你如今正处在一个N*N的矩阵中,这个矩阵里面有K个障碍物,你拥有一把武器,一发弹药一次能消灭一行或一列的障碍物,求最小的弹药消灭所有障碍物 输入为:     N K 接下来有K行,每行包括 ...

  5. 常用VPS测试工具整理

    来源: http://www.vpser.net/manage/vps-test-tool.html 购买VPS前主要是使用一些网络测试工具如ping.tracert.WinMTR之类的工具进行测试, ...

  6. Selenium2+python自动化44-元素定位参数化(find_element)

    前言 元素定位有八种方法,这个能看到这一篇的小伙伴都知道了,那么有没有一种方法,可以把八种定位合为一种呢?也就是把定位的方式参数化,如id,name.css等设置为一个参数,这样只需维护定位方式的参数 ...

  7. openshift 添加cron定时任务

    一般linux添加cron任务是在/etc/crontab,但是由于openshift的权限木有这么开放,所以如果需要设置定时任务的话,需要在如下的文件夹下添加你的sh文件,因为我需要的是每天运行一次 ...

  8. XCL-Charts画曲线图(CurveChart) 例2

    还有一个横向的曲线图(CurveChart) 效果: 代码: //图基类 chart = new CurveChart(); //图所占范围大小 chart.setChartRange(0, 0, t ...

  9. 24.Semaphore

    Semaphore     在进程方面完成信号线的控制,可以控制某个资源下,可被同时访问的线程个数.对系统的访问量进行评估,信号量维护了一个许可集:在许可前会阻塞每一个 semaphore.acqui ...

  10. 妙用HTML5的八大特性来开发移动webAPP

    webAPP的实现基础就是html5+js+css3.可是webAPP还是基于浏览器的微站点开发.正是如此,我们必需要深入的了解html5的特性,这样才干方便我们在开发和设计APP的时候.更合理的採用 ...