Hive和HBase整合

Hive和Hbase有各自不同的特征:hive是高延迟、结构化和面向分析的,hbase是低延迟、非结构化和面向编程的。Hive数据仓库在hadoop上是高延迟的。Hive集成Hbase就是为了使用hbase的一些特性。

Hive继承HBase可以有效利用HBase数据库的存储特性,如行更新和列索引等。在集成的过程中注意维持HBase jar包的一致性。Hive集成HBase需要在Hive表和HBase表之间建立映射关系,也就是Hive表的列和列类型与HBase表的列族及列限定词建立关联。每一个在Hive表中的域都存在与HBase中,而在Hive表中不需要包含所有HBase中的列。HBase中的rowkey对应到Hive中为选择一个域使用 :key 来对应,列族(cf:)映射到Hive中的其他所有域,列为(cf:cq)。

下面来简单实战下:

创建HBase表


  1. create 'user1',{NAME => 'info',VERSIONS => 1} 

向user表中插入一些数据


  1. put 'user1','1','info:name','zhangsan' 
  2. put 'user1','1','info:age','25' 
  3. put 'user1','2','info:name','lisi' 
  4. put 'user1','2','info:age','22' 
  5. put 'user1','3','info:name','wangswu' 
  6. put 'user1','3','info:age','21' 

使用scan命令来查看下user表中的数据


  1. scan 'user'; 

结果如下

ROW COLUMN+CELL

1 column=info:age, timestamp=1476773051604, value=25

1 column=info:name, timestamp=1476773046344, value=zhangsan

2 column=info:age, timestamp=1476773051685, value=22

2 column=info:name, timestamp=1476773051661, value=lisi

3 column=info:age, timestamp=1476773052632, value=21

3 column=info:name, timestamp=1476773051709, value=wangswu

3 row(s) in 0.0610 seconds

创建Hive中与HBase中对应的表


  1. SET hbase.zookeeper.quorum=hadoop001; 
  2. SET zookeeper.znode.parent=/hbase; 
  3. ADD jar /opt/bigdata/hive-1.2.1-bin/lib/hive-hbase-handler-1.2.1.jar; 
  4. // user1表 
  5. CREATE EXTERNAL TABLE user1 ( 
  6. rowkey string, 
  7. info map<STRING,STRING> 
  8. ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
  9. WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:") 
  10. TBLPROPERTIES ("hbase.table.name" = "user1"); 
  11. // user2表 
  12. CREATE EXTERNAL TABLE user2 ( 
  13. rowkey string, 
  14. name string, 
  15. age int 
  16. ) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler' 
  17. WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:name,info:age") 
  18. TBLPROPERTIES ("hbase.table.name" = "user2"); 

查询user1,user2表数据

查询user1表数据


  1. select * from user1; 

结果如下


  1. OK 
  2. 1       {"age":"25","name":"zhangsan"} 
  3. 2       {"age":"22","name":"lisi"} 
  4. 3       {"age":"21","name":"wangswu"} 
  5. Time taken: 0.467 seconds, Fetched: 3 row(s) 

查询user2表数据


  1. select * from user2; 

结果如下:


  1. OK 
  2.  
  3. 1 zhangsan 25 
  4.  
  5. 2 lisi 22 
  6.  
  7. 3 wangswu 21 
  8.  
  9. Time taken: 0.087 seconds, Fetched: 3 row(s) 

hive插入数据到hbase


  1. INSERT INTO TABLE user1 
  2. SELECT '4' AS rowkey, 
  3. map('name','lijin','age','22') AS info 
  4. from dual limit 1; 

本文作者:佚名

来源:51CTO

时间: 2024-11-10 00:57:23

Hive和HBase整合的相关文章

Hive与Hbase整合

Hive与Hbase整合 我们这边开始使用hbase做实时查询,但是分析的任务还是得交给hive,hive计算的结果导入到hbase. hive提供了几个jar包,帮助我们实现: 创建与hbase共享的表,数据(数据和表两边都有) 映射来自hbase的表到hive hive查询的结果直接导入hbase 启动hive 启动命令如下,主要是指定jar包,以及hbase使用的zookeeper的地址 bin/hive --auxpath /opt/CDH/hive/lib/hive-hbase-han

大数据工具篇之Hive与HBase整合完整教程

一.引言 最近的一次培训,用户特意提到Hadoop环境下HDFS中存储的文件如何才能导入到HBase,关于这部分基于HBase Java API的写入方式,之前曾经有过技术文章共享,本文就不再说明.本文基于Hive执行HDFS批量向HBase导入数据,讲解Hive与HBase的整合问题.这方面的文章已经很多,但是由于版本差异,可操作性不大,本文采用的版本均基于以下版本说明中的版本. 二.版本说明 序号 软件 版本 1 Hive  0.10.0 2 HBase 0.94.0 3 Hadoop 1.

急,求高手!!hive在向整合hbase的分区表插入数据时报错:Must specify table

问题描述 急,求高手!!hive在向整合hbase的分区表插入数据时报错:Must specify table hadoop版本:hadoop-2.7.12.7.1 hbase版本:hbase-1.1.2 hive版本:apache-hive-2.0.0-bin 本人是新手,在整合了hive和hbase之后,我在hive中创建了一张关联了hbase表的分区表,然后在向表插入数据的时候报错了,下面是插入语句和报错,求懂的人解答. visited_in_hive是关联了hbase表,准备插入数据的表

一文看懂HIVE和HBASE的区别

两者分别是什么? Apache Hive是一个构建在hadoop基础设施之上的数据仓库.通过Hive可以使用HQL语言查询存放在HDFS上的数据.HQL是一种类SQL语言,这种语言最终被转化为Map/Reduce. 虽然Hive提供了SQL查询功能,但是Hive不能够进行交互查询–因为它只能够在Haoop上批量的执行Hadoop. Apache HBase是一种Key/Value系统,它运行在HDFS之上.和Hive不一样,Hbase的能够在它的数据库上实时运行,而不是运行MapReduce任务

Impala与HBase整合实践

我们知道,HBase是一个基于列的NoSQL数据库,它可以实现的数据的灵活存储.它本身是一个大表,在一些应用中,通过设计RowKey,可以实现对海量数据的快速存储和访问.但是,对于复杂的查询统计类需求,如果直接基于HBase API来实现,性能非常差,或者,可以通过实现MapReduce程序来进行查询分析,这也继承了MapReduce所具备的延迟性. 实现Impala与HBase整合,我们能够获得的好处有如下几个: 可以使用我们熟悉的SQL,像操作传统关系型数据库一样,很容易给出复杂查询.统计分

浅谈Hive vs. HBase

对于刚接触大数据的用户来说,要想区分Hive与HBase是有一定难度的.本文将尝试从其各自的定义.特点.限制.应用场景等角度来进行分析,以作抛砖引玉之用. Hive是什么? Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,注意这里不是数据库.Hive可以看作是用户编程接口,它本身不存储和计算数据:它依赖于HDFS(Hadoop分布式文件系统)和MapReduce(一种编程模型,映射与化简:用于大数据并行运算).其对HDFS的操作类似于SQL-名为HQL,它提供

Hive Over HBase的介绍

Hive Over HBase是基于Hive的HQL查询引擎支持对hbase表提供及时查询的功能,它并不是将hql语句翻译成mapreduce来运行,其响应时间在秒级别. 特性 支持的字段类型: boolean, tinyint, smallint, int, bigint, float, double, string, struct (当hbase中的rowkey字段为struct类型,请将子字段定义为string类型,同时指定表的collection items terminated分隔字符

hive跟hbase整合用hive导入数据报错,报一个路径不是目录。

问题描述 hive跟hbase整合用hive导入数据报错,报一个路径不是目录. hive>load data local inpath '/home/hadoop/ha1.txt' into table ha1; FAILED: Hive Internal Error: java.lang.RuntimeException(org.apache.hadoop.ipc.RemoteException: java.io.FileNotFoundException: Parent path is no

服务器-Springmvc 和 Hbase整合

问题描述 Springmvc 和 Hbase整合 求大神指点 运行到图中红线处报错,但是我用junit 测试这个方法是正常的,部署到tomcat服务器上之后运行就会出错.HbaeDAO就是访问hbase的一个类,测试运行的时候没问题的 解决方案 这不是明显的少jar包吗