Hive On HBase实战
1.概述
HBase是一款非关系型、分布式的KV存储数据库。用来存储海量的数据,用于键值对操作。目前HBase是原生是不包含SQL操作,虽然说Apache Phoenix可以用来操作HBase表,但是需要集成对应的Phoenix依赖包到HBase集群中,同时需要编写对应的Schema才能实现SQL操作HBase。
本篇博客,笔者将为大家介绍另一位一种SQL方式来操作HBase,那就是Hive。
2.内容
2.1 使用场景
熟悉大数据的同学应该都知道,Hive是一个分布式的数据仓库,它能够将海量数据,结构化存储到HDFS上,然后通过SQL的方式对这些海量数据进行业务处理。而且,Hive学习成本很低,熟悉SQL的同学,很快就能编写一个Hive应用程序。
我们通过Hive把数据加载到HBase表中时,数据源可以是文件,也可以是表。当HBase集群集成Hive后,如果对Hive表追加数据的同时,HBase表中的数据也会增加。在原生的HBase集群中,HBase表不支持连接查询或是分组查询等,但是我们可以通过Hive On HBase的方式来让HBase集群支持这些功能。比如,事先将数据加载到Hive表中,然后通过Hive SQL的JOIN、GROUP BY等语法来操作。
2.2 基础环境
实战的基础环境信息如下所示:
| 组件 | 版本 |
| Hadoop | 2.7.4 |
| Hive | 3.1.2 |
| HBase | 1.2.0 |
| JDK | 1.8 |
2.3 Hive On HBase表
Hive字段和HBase中的列都是通过Storage Handler来维护的。创建Hive表时,把存储格式指定为Storage Handler,这个程序被编译成一个独立的模块,在Java中它就是一个独立的Jar包,比如hive-hbase-handler-{version}.jar,Hive的客户端必须要能够识别到这个JAR,可以通过--auxpath来指定,操作命令如下:
hive --auxpath hive-hbase-handler-{version}.jar --hiveconf hbase.master=hbasemaster:
接着将HBase安装目录lib下的包复制到Hive安装目录lib中,操作命令如下:
cp -r $HBASE_HOME/lib/* $HIVE_HOME/lib
最后,执行hive命令启动Hive客户端窗口。
在Hive集成HBase时,可以有效的利用HBase的存储个性,比如更新和索引等。Hive表需要与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" = "xyz",
"hbase.mapred.output.outputtable" = "xyz"
);
然后,执行hbase shell来查看创建的HBase表,命令如下:
hbase(main):001:0> list
xyz
1 row(s) in 0.0530 seconds
hbase(main):002:0> describe 'xyz'
DESCRIPTION ENABLED
{NAME => 'xyz', FAMILIES => [{NAME => 'cf1', COMPRESSION => 'NONE', VE true
RSIONS => '3', TTL => '2147483647', BLOCKSIZE => '65536', IN_MEMORY =>
'false', BLOCKCACHE => 'true'}]}
1 row(s) in 0.0220 seconds
hbase(main):003:0> scan 'xyz'
ROW COLUMN+CELL
2.4 加载数据源到Hive表
然后,将HDFS上的文本文件加载到一个临时的Hive表中,操作命令如下所示:
hive -e "load data local inpath '/hbase/hive/data/testdata.txt' overwrite into table hive_on_hbase_test;"
接着,把hive_on_hbase_test表中的数据加载到hbase_table_1表中,操作命令如下:
insert overwrite table hbase_table_1 select * from hive_on_hbase_test;
2.4.1 查询Hive表
查询hbase_table_1表是否有数据,查询语句如下:
hive> select * from hbase_table_1;
Total MapReduce jobs = 1
Launching Job 1 out of 1
...
OK
100 val_100
Time taken: 3.582 seconds
正常情况下,显示结果会与testdata.txt文件中的数据是一致的。
2.4.2 查询HBase表
当hbase_table_1表正常加载数据后,我们可以使用HBase的Scan命令来查看数据,具体操作命令如下:
hbase(main):001:0> scan 'xyz',LIMIT=>1
ROW COLUMN+CELL
100 column=cf1:val, timestamp=1572154138015, value=val_100
1 row(s) in 0.0110 seconds
这里防止数据显示过多,我们设置一下限制条件。
由于WAL开销,插入大量数据可能会很慢;如果要禁用此功能,可以执行如下命令:
set hive.hbase.wal.enabled=false;
这里需要注意的是,如果HBase发生故障,禁用WAL可能会导致数据丢失,因此只有在有其他可用的恢复策略时才建议使用此选项。
2.4.3 外部表
如果需要使用Hive访问已存在的HBase表时,可以使用Hive外部表,操作命令如下:
CREATE EXTERNAL TABLE hbase_table_2(
key int,
value string
) STORED BY 'org.apache.hadoop.hive.hbase.HBaseStorageHandler'
WITH SERDEPROPERTIES ("hbase.columns.mapping" = "cf1:val")
TBLPROPERTIES(
"hbase.table.name" = "xyz2",
"hbase.mapred.output.outputtable" = "xyz2"
);
然后,在Hive客户端中查询外部表的数据,操作命令如下:
select * from hbase_table_2;
3.总结
Hive On HBase集成比较简单,实现难度不算太大。如果有离线场景(延时要求不高),或者需要使用SQL来做JOIN、GROUP BY等操作的业务场景,可以尝试用Hive On HBase的方式来实现。
4.结束语
这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!
另外,博主出书了《Kafka并不难学》和《Hadoop大数据挖掘从入门到进阶实战》,喜欢的朋友或同学, 可以在公告栏那里点击购买链接购买博主的书进行学习,在此感谢大家的支持。关注下面公众号,根据提示,可免费获取书籍的教学视频。
Hive On HBase实战的更多相关文章
- Hive 整合Hbase
摘要 Hive提供了与HBase的集成,使得能够在HBase表上使用HQL语句进行查询 插入操作以及进行Join和Union等复杂查询.同时也可以将hive表中的数据映射到Hbase中. 应用 ...
- [转]浅谈Hive vs. HBase 区别在哪里
浅谈Hive vs. HBase 区别在哪里 导读:Apache Hive是一个构建于Hadoop(分布式系统基础架构)顶层的数据仓库,Apache HBase是运行于HDFS顶层的NoSQL(=No ...
- 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 Sqoop 大数据 Hive HBase ETL 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟 基础环境 ...
- HBase 实战(2)--时间序列检索和面检索的应用场景实战
前言: 作为Hadoop生态系统中重要的一员, HBase作为分布式列式存储, 在线实时处理的特性, 备受瞩目, 将来能在很多应用场景, 取代传统关系型数据库的江湖地位. 本篇主要讲述面向时间序列/面 ...
- hive与hbase整合过程
实现目标 Hive可以实时查询Hbase中的数据. hive中的表插入数据会同步更新到hbase对应的表中. 可以将hbase中不同的表中的列通过 left 或 inner join 方式映射到hiv ...
- Hive集成HBase;安装pig
Hive集成HBase 配置 将hive的lib/中的HBase.jar包用实际安装的Hbase的jar包替换掉 cd /opt/hive/lib/ ls hbase-0.94.2* rm -rf ...
- Hive 实现HBase 数据批量插入
HBase 数据的插入可以使用Java API 来写Java 程序逐条倒入,但是不是很方便.利用Hive自带的一个Jar包,可以建立Hive和HBase的映射关系 利用Hive 的insert可以将批 ...
- Hive Over HBase
1. 在hbase上建测试表 hbase(main)::> create 'test_hive_over_hbase','f' row(s) in 2.5810 seconds hbase(ma ...
- HBase 实战(1)--HBase的数据导入方式
前言: 作为Hadoop生态系统中重要的一员, HBase作为分布式列式存储, 在线实时处理的特性, 备受瞩目, 将来能在很多应用场景, 取代传统关系型数据库的江湖地位. 本篇博文重点讲解HBase的 ...
随机推荐
- 49 (OC)* layoutSubviews和drawRect调用
layoutSubviews: 简单的说就是你如果想调用此方法.不要直接调用,需要调用setNeedsLayout方法来刷新布局! drawRect:刷新布局 一:layoutSubviews在以下 ...
- ASP.NET Core 3.0 : 二十四. 配置的Options模式
上一章讲到了配置的用法及内部处理机制,对于配置,ASP.NET Core还提供了一种Options模式.(ASP.NET Core 系列目录) 一.Options的使用 上一章有个配置的绑定的例子,可 ...
- 第一次登陆jenkins页面空白解决方案
之前搭建了几次jenkins环境都没问题,最近换了工作,再次搭建jenkins用的是docker部署: https://www.cnblogs.com/yy-cola/p/10457484.html ...
- Excel VBA入门(十)用户窗体开发
VBA 中的用户窗体就是指带 UI 的用户界面,在运行的时候会单独弹出一个窗口,类似于在 windows 系统中运行的一个可执行程序一样(这个说法不太严谨,因为可执行程序也可能是只有命令窗口而没有 U ...
- 【SQL server初级】SQL索引(一)
SQL索引[一](此文章为“数据库性能优化二:数据库表优化”附属文章之一) SQL索引在数据库优化中占有一个非常大的比例, 一个好的索引的设计,可以让你的效率提高几十甚至几百倍,在这里将带你一步步揭开 ...
- windows下 python 如何安装pygame模块
本机系统:win7,Pyhon版本: 3.6.0 1. 安装下载python官网 https://www.python.org/ 下载地址 https://www.python.org/downloa ...
- [LeetCode] 470. Implement Rand10() Using Rand7()
Given a function rand7 which generates a uniform random integer in the range 1 to 7, write a functio ...
- A-08 拉格朗日对偶性
目录 拉格朗日对偶性 一.原始问题 1.1 约束最优化问题 1.2 广义拉格朗日函数 1.3 约束条件的考虑 二.对偶问题 三.原始问题和对偶问题的关系 3.1 定理1 3.2 推论1 3.3 定理2 ...
- 小游戏:200行python代码手写2048
#-*- coding: utf-8 -*- import curses from random import randrange, choice from collections import de ...
- Java线程池的底层实现与使用
前言 在我们进行开发的时候,为了充分利用系统资源,我们通常会进行多线程开发,实现起来非常简单,需要使用线程的时候就去创建一个线程(继承Thread类.实现Runnable接口.使用Callable和F ...