摘要

Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询、同时也可以将hive表中的数据映射到Hbase中。

 
 

应用场景

2.1 将ETL操作的数据存入HBase

 
 

 
 

  
 

2.2 HBase作为Hive的数据源

 
 

 
 

2.3 构建低延时的数据仓库

环境准备

 
 

 
 

3.1 hive与hbase整合环境配置

  • 修改hive-site.xml文件,添加配置属性(zookeeper的地址)

    [root@hadoop01 conf]# vim hive-site.xml

<property>

<name>hbase.zookeeper.quorum</name>

<value>node1:2181,node2:2181,node3:2181</value>

</property>

 
 

  • 引入hbase的依赖包

    将hbase安装目录下的lib文件夹下的包导入到hive的环境变量中,在hive-env.sh 文件中添加

    [root@hadoop01 conf]# vim hive-env.sh

export HIVE_CONF_DIR=/usr/local/hive/conf

export HIVE_CLASSPATH=$HIVE_CLASSPATH:$HBASE_HOME/lib/*

 
 

至此、hive与hbase整合环境准备完成。

实战

4.1 hbase表映射到hive表中

  • 在hbase中创建表:表名hbase_test, 有三个列族 f1、f2、f3

     
     

create
'hbase_test',{NAME => 'f1',VERSIONS => 1},{NAME => 'f2',VERSIONS => 1},{NAME => 'f3',VERSIONS => 1}

 
 

  • 插入数据

     
     

put 'hbase_test','r1','f1:name','zhangsan'

put 'hbase_test','r1','f2:age','20'

put 'hbase_test','r1','f3:sex','male'

put 'hbase_test','r2','f1:name','lisi'

put 'hbase_test','r2','f2:age','30'

put 'hbase_test','r2','f3:sex','female'

put 'hbase_test','r3','f1:name','wangwu'

put 'hbase_test','r3','f2:age','40'

put 'hbase_test','r3','f3:sex','male'

 
 

 
 

 
 

  • 查询数据

     
     

     
     

  • 创建基于hbase的hive表

     
     

CREATE EXTERNAL TABLE hiveFromHbase(

rowkey string,

f1 map<STRING,STRING>,

f2 map<STRING,STRING>,

f3 map<STRING,STRING>

) STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:,f2:,f3:")

TBLPROPERTIES ("hbase.table.name" = "hbase_test");

 
 

这里使用外部表映射到HBase中的表,这样,在Hive中删除表,并不会删除HBase中的表,否则,就会删除。另外,除了rowkey,其他三个字段使用Map结构来保存HBase中的每一个列族。

  • hbase.columns.mapping

    Hive表和HBase表的字段映射关系,分别为:Hive表中第一个字段映射:key(rowkey),第二个字段映射列族f1,第三个字段映射列族f2,第四个字段映射列族f3

  • hbase.table.name

    HBase中表的名字

     
     

  • hive中查询hbase表

     
     

    可以看到,Hive中有3行数据,因为有3个rowkey,每一个列族的列和值,分别被存储到Map结构中

     
     

  • Hive中插入数据到HBase表

     
     

insert into table hiveFromHbase

SELECT
'r4'
AS rowkey,

map('name','zhaoliu') AS f1,

map('age','50') AS f2,

map('sex','male') AS f3

from person limit 1;

 
 

插入成功后查看2张表的数据

 
 

hive表hiveFromHbase:

 
 

 
 

Hbase表hbase_test:

 
 

 
 

 
 

Hive中的外部表hiveFromHbase,就和其他外部表一样,只有一份元数据,真正的数据是在HBase表中,Hive通过hive-hbase-handler来操作HBase中的表。

 
 

 
 

4.2 hive表映射到hbase表中

  • 创建映射hbase的表

 
 

create table hive_test(

id string,

name string,

age int,

address string

)STORED BY
'org.apache.hadoop.hive.hbase.HBaseStorageHandler'

WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,f1:name,f2:age,f3:address")

TBLPROPERTIES ("hbase.table.name" = "hbaseFromhive");

 
 

 
 

  • 查看hbase映射表是否产生

     
     

  • 查看hbase映射表的表结构和数据

     
     

     
     

     
     

    由于hive表中没有加载数据,此时hbase中映射的表也无数据

     
     

     
     

  • Hive表加载数据

     
     

    数据来源于另一张表hive_source;

查看hive_source的表结构和数据

 
 

加载数据:

insert overwrite table hive_test select * from hive_source;

 
 

 
 

  • 查看hive和hbase中表的数据

     
     

     
     

    映射表可以查看到hive表中的数据。

Hive 整合Hbase的更多相关文章

  1. 大数据学习系列之五 ----- Hive整合HBase图文详解

    引言 在上一篇 大数据学习系列之四 ----- Hadoop+Hive环境搭建图文详解(单机) 和之前的大数据学习系列之二 ----- HBase环境搭建(单机) 中成功搭建了Hive和HBase的环 ...

  2. hive整合hbase

    Hive整合HBase后的好处: 通过Hive把数据加载到HBase中,数据源可以是文件也可以是Hive中的表. 通过整合,让HBase支持JOIN.GROUP等SQL查询语法. 通过整合,不仅可完成 ...

  3. 四 Hive整合HBase

    安装环境: hbase版本:hbase-1.4.0-bin.tar.gz hive版本:   apache-hive-1.2.1-bin.tar 注意请使用高一点的hbase版本,不然就算hive和h ...

  4. 创建hive整合hbase的表总结

    [Author]: kwu 创建hive整合hbase的表总结.例如以下两种方式: 1.创建hive表的同步创建hbase的表 CREATE TABLE stage.hbase_news_compan ...

  5. 大数据学习系列之九---- Hive整合Spark和HBase以及相关测试

    前言 在之前的大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 中介绍了集群的环境搭建,但是在使用hive进行数据查询的时候会非常的慢,因为h ...

  6. Hive篇---Hive与Hbase整合

     一.前述 Hive会经常和Hbase结合使用,把Hbase作为Hive的存储路径,所以Hive整合Hbase尤其重要. 二.具体步骤 hive和hbase同步https://cwiki.apache ...

  7. Hive综合HBase——经Hive阅读/书写 HBase桌子

    社论: 本文将Hive与HBase整合在一起,使Hive能够读取HBase中的数据,让Hadoop生态系统中最为经常使用的两大框架互相结合.相得益彰. watermark/2/text/aHR0cDo ...

  8. 二十、Hadoop学记笔记————Hive On Hbase

    Hive架构图: 一般用户接口采用命令行操作, hive与hbase整合之后架构图: 使用场景 场景一:通过insert语句,将文件或者table中的内容加入到hive中,由于hive和hbase已经 ...

  9. hive_学习_02_hive整合hbase(失败)

    一.前言 本文承接上一篇:hive_学习_01_hive环境搭建(单机) ,主要是记录 hive 整合hbase的流程 二.环境准备 1.环境准备 操作系统 : linux CentOS 6.8 jd ...

随机推荐

  1. 读jQuery源码释疑笔记

    本释疑笔记是针对自己在看源码的过程中遇到的一些问题的解答,对大众可能不具有参考性,不过可以看看有没有你也不懂得地方,相互学习,相互进步.  1.each的用法 之前对each的用法一直迷迷糊糊,这次终 ...

  2. NPM的正确使用方式

    registry配置 npm registry原意为记录.登记.登记处的意思,这里指的也就是node包存放的服务器地址. 查看registry -> npm config get registr ...

  3. 怎样删除windows.old文件

    方法1: 1.在C盘上点右键,选择属性.2.在常规选项卡中点击”磁盘清理“3.稍等片刻再弹出的选项卡中点击清理系统文件4.选中以前Windows的安装5.点击确定即可安全清理 方法二: WIN7中的w ...

  4. 【Linux】rpm常用命令及rpm参数介绍

    RPM是RedhatPackageManager的缩写,是由RedHat公司开发的软件包安装和管理程序,同Windows平台上的Uninstaller比较类似.使用RPM,用户可以自行安装和管理Lin ...

  5. Redis——非阻塞IO和队列

    Redis是个高并发的中间件,但是确实是单线程.而且,Nginx.Node.js等也是单线程的.Redis通过非阻塞IO(IO多路复用)处理那么多的并发客户端连接,并且,由于Redis所有的数据都在内 ...

  6. Python3.6下的Requests登录及利用Cookies登录

    利用Python中的Requests模块可以实现Post,Get等发送功能,我以登录某网站为例,记录使用Post发送用户名.密码及图形验证码,以及通过Cookies直接登录的内容. 1.利用POST发 ...

  7. 【读书笔记】iOS-网络-优化请求性能

    一,度量网络性能 1,网络带宽 用于描述无线网络性能的最常见度量指标就是带宽.在数字无线通信中,网络带宽可以描述为两个端点之间的通信通道每秒钟可以传输的位数.现代无线网络所能提供的理论带宽是很高的.不 ...

  8. chrome-Firefox-IE浏览器兼容总结

    作为一名WEB前端程序员,相信每个人对浏览器的兼容都"情有独钟",下面就一些常用的浏览器的兼容列举一二. 一.块级元素(block)一般不转化为inline-block,其实是因为 ...

  9. SD从零开始45-46

    [原创] SD从零开始45 运输流程的控制 运输业务场景的例子Examples 一个公司可使用不同的运输业务场景,通过不同的处理类型或者运输方式来刻画: 要模型化这些不同的装运,你可以在配置中定义装运 ...

  10. flutter row 文字显示不全

    解决:在row层中的text层加一个expend flutter Row里面元素居中显示 new Expanded( flex: , child: new Row( children: <Wid ...