文档章节

[喵咪大数据]Hive+Hbase关联

喵了_个咪
 喵了_个咪
发布于 01/06 14:25
字数 1683
阅读 305
收藏 3

在之前的章节中我们已经一同学习的Hive和HBase相关的知识,但是Hive和HBase都存在各自的问题,Hive实时性不强单条写入数据慢,HBase查询能力差不具备复杂查询的能力,但是Hive和HBase有个隐藏的功能就是关联操作,既然可以享受到HBase的实时性还可以享受到Hive查询带来的便捷.

附上:

喵了个咪的博客:w-blog.cn

1.前言

**注意:**Hive2.3.0 和 Hbase 关联表 使用 select count(*) form 表名 只会返回0条不会走 MR 程序 可以通过count(字段) 来查询会查询到具体数字 Hive2.1.1版本无此问题

Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询,一方面可以通过Hive来补充Hbase在结构查询场景的不足,一方面Hbase可以作为Hive的一个数据源

优点:

Hive方便地提供了Hive QL的接口来简化MapReduce的使用, 而HBase提供了低延迟的数据库访问。如果两者结合,可以利 用MapReduce的优势针对HBase存储的大量内容进行离线的计算和分析。 操作方便,hive提供了大量系统功能

缺点:

性能的损失,hive有这样的功能, 他支持通过类似sql语句的语法来操作hbase中的数据, 但是速度慢。

2.准备环境

要结合使用hbase在hive所在的节点上必须要配置hbase 大家发现在运行HIVE命令的时候会出现,缺少hbase 可以看到hive默认就已经开始支持hbase了

which: no hbase in (/usr/local/ant/bin:/usr/local/hadoop-2.7.3/bin:/usr/local/hive-2.1.1/bin:/usr/local/jdk1.8/bin:/usr/local/mysql/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)

我们首先需要把hbase 从hadoop-1 cp 到hive机器上

> scp -r /usr/local/hbase-1.3.1/ root@192.168.1.104:/usr/local/hbase-1.3.1/

修改环境配置文件

> vim /etc/profile
# hbase
export HBASE_HOME=/usr/local/hbase-1.3.1
export PATH=$HBASE_HOME/bin:$PATH
> source /etc/profile

配置好之后在运行hive就不会有上面的which提示了

3.关联

创建一个Hbase能够识别的Hive表

CREATE 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" = "hbase_table_1");

其中:

  • hbase.table.name 定义在hbase的table名称
  • hbase.columns.mapping 定义在hbase的列族

hbase里自动建好hbase_table_1这个表然后在Hive和Hbase查看表

hive> SHOW TABLES;
OK
hbase_table_1
Time taken: 0.014 seconds, Fetched: 1 row(s)
hbase(main):004:0> list
TABLE                                                                                                                       
hbase_table_1                                                                                                               
member                                                                                                                      
member2                                                                                                                     
3 row(s) in 0.0040 seconds

可以在Hbase中查看一下表的描述

hbase(main):005:0> describe 'hbase_table_1'
Table hbase_table_1 is ENABLED                                                                                              
hbase_table_1                                                                                                               
COLUMN FAMILIES DESCRIPTION                                                                                                 
{NAME => 'cf1', BLOOMFILTER => 'ROW', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLOCK_ENCOD
ING => 'NONE', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCKSIZE => '65536', REP
LICATION_SCOPE => '0'}                                                                                                      
1 row(s) in 0.0900 seconds

使用 Hbase插入几条数据

put 'hbase_table_1','100','cf1:val','www.gongchang.com';

也可以通过Hive中写入数据然后映射到Hbase中(明显在Hive中插入数据会指向MR效率太慢了)

INSERT INTO TABLE hbase_table_1 values("101","www.baidu.com");

查看数据

hbase(main):021:0> scan 'hbase_table_1'
ROW                              COLUMN+CELL                                                                                
 100                             column=cf1:val, timestamp=1501654042302, value=www.gongchang.com                           
 101                             column=cf1:val, timestamp=1501654548848, value=www.baidu.com                               
2 row(s) in 0.0130 seconds
hive> select * from hbase_table_1;
OK
100     www.gongchang.com
101     www.baidu.com
Time taken: 0.16 seconds, Fetched: 2 row(s)

这样建立出来的表插入的源数据都是在Hbase里面存放着,当从Hbase中删除记录的同时也会删除在Hive中的数据

数据可以导入到Hive中另外一个表中独立于Hbase数据

CREATE TABLE hbase_table_2(key int, value string);
insert overwrite TABLE hbase_table_1 select * from hbase_table_1 where key = '100';

上面这种方式是内连表删除Hive中的表同时也会影响到Hbase中的数据

上面是在创建Hive的表的时候一同创建了Hbase的表一般的情况Hbase的数据可能先存在要怎么关联到Hive中(这类是外链表删除Hive中的表不影响Hbase中的数据)

准备Hbase数据

hbase(main):009:0> create 'student','info'
0 row(s) in 1.7530 seconds  
put "student",'1','info:name','tom'
put "student",'2','info:name','lily'
put "student",'3','info:name','wwn'

hbase(main):032:0> scan 'student'
ROW                              COLUMN+CELL                                                                                
 1                               column=info:name, timestamp=1501655363517, value=tom                                       
 2                               column=info:name, timestamp=1501655363526, value=lily                                      
 3                               column=info:name, timestamp=1501655363534, value=wwn                                       
3 row(s) in 0.0080 seconds

创建Hive中的关联表

CREATE EXTERNAL TABLE hbase_table_3(key int, value string)      
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'    
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "info:name")     
TBLPROPERTIES("hbase.table.name" = "student");
  
hive> select * from hbase_table_3;
OK
1       tom
2       lily
3       wwn
Time taken: 0.109 seconds, Fetched: 3 row(s)

4. 多列和多列族

CREATE TABLE hbase_table_add1(key int, value1 string, value2 int, value3 int)      
STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'    
WITH SERDEPROPERTIES ("hbase.columns.mapping" = ":key,info:col1,info:col2,city:nu")  
TBLPROPERTIES("hbase.table.name" = "student_info");   
通过参数hive.cli.print.header可以控制在cli中是否显示表的列名。
hive> set hive.cli.print.header=true;  
hive> select * from hbase_table_3;  
OK
hbase_table_3.key       hbase_table_3.value
1       tom
2       lily
3       wwn
Time taken: 0.113 seconds, Fetched: 3 row(s)
insert overwrite table hbase_table_add1 select key,value,key+1,key+100 from hbase_table_3;  
hive> select * from hbase_table_add1;
OK
hbase_table_add1.key    hbase_table_add1.value1 hbase_table_add1.value2 hbase_table_add1.value3
1       tom     2       101
2       lily    3       102
3       wwn     4       103
Time taken: 0.097 seconds, Fetched: 3 row(s)
hbase(main):037:0> list
TABLE                                                                                                                       
hbase_table_1                                                                                                               
member                                                                                                                      
member2                                                                                                                     
student                                                                                                                     
student_info                                                                                                                
5 row(s) in 0.0050 seconds

=> ["hbase_table_1", "member", "member2", "student", "student_info"]
hbase(main):038:0> scan 'student_info'
ROW                              COLUMN+CELL                                                                                
 1                               column=city:nu, timestamp=1501656221390, value=101                                         
 1                               column=info:col1, timestamp=1501656221390, value=tom                                       
 1                               column=info:col2, timestamp=1501656221390, value=2                                         
 2                               column=city:nu, timestamp=1501656221390, value=102                                         
 2                               column=info:col1, timestamp=1501656221390, value=lily                                      
 2                               column=info:col2, timestamp=1501656221390, value=3                                         
 3                               column=city:nu, timestamp=1501656221390, value=103                                         
 3                               column=info:col1, timestamp=1501656221390, value=wwn                                       
 3                               column=info:col2, timestamp=1501656221390, value=4                                         
3 row(s) in 0.0120 seconds

这里有3个hive的列,(value1和value2,value3),2个hbase的列簇(info,city) hive的2列(value,和value2)对应1个hbase的列簇(info,在hbase的列名称col1,col2), hive的另外1列(value3)对应列nu位于city列簇。

这里实现了hive中表,多列存放到hbase少量固定的列簇中。

5 总结

Hive和HBase相结合有更高的灵活性,无论是对HBase数据统计查询还是对Hive扩展数据源都有很好的使用场景,下节将给大家介绍一个厉害的大数据管理工具HUE,最后谢谢大家的支持我们下节再见!

注:笔者能力有限有说的不对的地方希望大家能够指出,也希望多多交流!

© 著作权归作者所有

共有 人打赏支持
喵了_个咪
粉丝 266
博文 144
码字总数 185422
作品 4
杨浦
技术主管
KafKa的介绍以及使用场景 KafKa

[喵咪KafKa(1)]KafKa的介绍以及使用场景 前言 哈喽!大家好呀,真是一坑未平一坑又起,otter还在继续更新的同时,笔者也为大家带来了关于kafka相关的一系列博客,要说到kafka就离不开现在特别火热...

优惠码优惠
06/24
0
0
[喵咪PHP]页面显示空白问题

哈喽!大家好啊,喵咪PHP第一次和大家见面了,熟悉的朋友呢也之道喵咪我也开了喵咪Liunx和喵咪Golang这两个坑目的呢是吧平常遇到的一些问题或者是在学习中的东西好工具分享出来和大家交流沟通,...

喵了_个咪
2016/06/09
408
0
CM团队换吉祥物了 喵了个咪的叫:Cid

如果你使用过CM团队的ROM的话,对上面那个滑板的Android机器人不会陌生吧,不过最近他们准备更换吉祥物了,因为跟Android官方的商标有冲突,都是Android机器人。 选择C.I.D.名字的原因是源于...

红薯
2012/04/08
2.3K
13
PhalApi-v1.3.1 (感恩版)发布,PHP 轻量级开源接口框架

PhalApi-v1.3.1 (感恩版)发布,PHP轻量级开源接口框架 [前言] 感恩节来临之际,PhalApi迎来了等候了一个多月的v1.3.1版本更新. 在v1.3.1版本中着重对1.3.0版本中存在BUG进行了修复,并且进一步...

喵了_个咪
2015/11/28
1K
5
PhalApi(π框架) v1.4.1 发布,PHP 轻量级 API 接口开发框架

[前言] 夏天的脚步悄悄来临,在各位小伙伴的辛勤付出下,PhalApi迎来了新版本V1.4.1,在这次更新中着重以开发者便捷为本新增优化了很多功能,如对接口文档添加了各项重要功能可以直接在文档页面进...

喵了_个咪
2017/07/01
903
4

没有更多内容

加载失败,请刷新页面

加载更多

Shell特殊符号总结以及cut,sort,wc,uniq,tee,tr,split命令

特殊符号总结一 * 任意个任意字符 ? 任意一个字符 # 注释字符 \ 脱义字符 | 管道符 # #号后的备注被忽略[root@centos01 ~]# ls a.txt # 备注 a.txt[root@centos01 ~]# a=1[root@centos01...

野雪球
27分钟前
1
0
OSChina 周二乱弹 —— 程序员圣衣

Osc乱弹歌单(2018)请戳(这里) 【今日歌曲】 @达尔文:分享Skeeter Davis的单曲《The End of the World》 《The End of the World》- Skeeter Davis 手机党少年们想听歌,请使劲儿戳(这里...

小小编辑
42分钟前
4
0
[ python import module ] 导入模块

import moudle_name ----> import module_name.py ---> import module_name.py文件路径 -----> sys.path (这里进行查找文件) # from app.web import Personimport app.web.Person as Pe......

_______-
昨天
3
0
Redis性能问题排查解决手册

一、性能相关的数据指标 通过Redis-cli命令行界面访问到Redis服务器,然后使用info命令获取所有与Redis服务相关的信息。通过这些信息来分析文章后面提到的一些性能指标。 nfo命令输出的数据可...

IT--小哥
昨天
1
0
mixin混入

①新建mixin.js文件 const mixin = { methods: { /** * 分页公共方法 */ handleSizeChange(val) { this.pageData.size = val; this.query(); }, hand......

不负好时光
昨天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部