HBase - Phoenix剖析

简介:

1.概述

  在《Hadoop-Drill深度剖析》 一文当中,给大家介绍了Drill的相关内容,就实时查询来说,Drill基本能够满足要求,同时还可以做一个简单业务上的聚合,如果在使用Hive做一 些简单的业务统计(不涉及多维度,比如CUBE,ROLLUP之类的函数),只是用一些基本的聚合函数或是JOIN ON之类的,Drill基本满足要求,而且响应速度可比OLTP。今天给大家剖析的是另外一种工具,由于目前Drill官方不支持对表的插入,更新操作。 所以,在操作HBase的时候,若遇到这些需求,Drill就有点力不从心。那么,Phoenix可以满足以上需求。它更接近与标准的SQL。

2.Architecture

  在Phoenix中SQL Query Plan的执行,基本上是通过构建一系列的HBase Scan来完成。为了尽可能减少数据的传输,在Region Server使用Coprocessor来尽可能的执行Aggregate相关的工作,基本实现的思路是使用RegionObserver在 PostScannerOpen Hook中将RegionScanner替换成支持Aggregation工作的定制化的Scanner,具体的Aggregate操作通过Custom 的Scan属性传递给RegionScanner。然与基于MapReduce的框架执行Plan的思想比较,基本上就是通过Coprocessor,使 用RegionServer自身来在各个节点上执行Aggregation。另外,通过各种定制的Filter在HBase的RegionScanner Scan过程中,尽早的将不相关的数据过滤掉。采用JDBC接口和应用程序交互。

3.Grammar

  本篇博客所对应的软件版本号,如下所示:

  • HBase:0.98
  • Phoenix:4.6-HBase-0.98

  这里需要注意的是,Phoenix的版本是和HBase版本相匹配的,可以在Phoenix的官网选择对应的HBase版本。就本篇博客截止,官方所支持的语法如下图所示:

3.How to use

  如何将Phoenix嵌入到现有业务当中,其实,Phoenix只是一个中间件(或是一个HBase的SQL插件),它的使用较为简单,首先,我们准备好对应的安装包,下载地址如下所示:

  然后,将Phoenix目录下的phoenix-*.jar拷贝到HBase的lib目录,这里面是将所有的插件均拷贝到HBase了,若是只使用个别插件,大家可按需选择即可。然后重启HBase集群即可。

3.1 Shell Client

  这里,我们可以验证Phoenix是否可用,可以通过终端来验证,在Phoenix的bin目录当中有一个sqlline.py脚本,可以通过该脚本来操作HBase中的表,命令如下所示:

./sqlline.py zk01,zk02,zk03:2181

  通过英文感叹号可以获取帮助命令,如下图所示:

  然后,我们可以做一些测试来,验证起可用性。如下图所示:

  脚本如下所示:

1
2
3
4
5
6
7
create table test3 (mykey integer not null primary key , mycolumn varchar );
upsert into test3 values (1, 'Hello' );
upsert into test3 values (2, 'World2' );
upsert into test3 values (3, 'World3' );
upsert into test3 values (4, 'World4' );
upsert into test3 values (5, 'World5' );
select * from test3;

3.2 JDBC

  另外,Phoenix也支持JDBC去访问,这里笔者给大家写了一个示例代码,如下所示:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
package cn.smrtloli.phoenix.demo;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
 
/**
  * @Date Dec 14, 2015
  *
  * @Author dengjie
  *
  * @Note TODO
  */
public class PhoenixDemo {
     private static String driver = "org.apache.phoenix.jdbc.PhoenixDriver" ;
 
     public static void main(String[] args) throws SQLException {
         try {
             Class.forName(driver);
         } catch (ClassNotFoundException e) {
             e.printStackTrace();
         }
         Statement stmt = null ;
         ResultSet rset = null ;
 
         Connection con = DriverManager.getConnection( "jdbc:phoenix:zk01,zk02,zk03:2181" );
         stmt = con.createStatement();
         String sql = "select * from test3" ;
         rset = stmt.executeQuery(sql);
         while (rset.next()) {
             System.out.println(rset.getString( "mycolumn" ));
         }
         stmt.close();
         con.close();
     }
}

  另外,在pom.xml中添加如下依赖JAR文件,内容如下所示:



<dependency>
    <groupId>org.apache.phoenix</groupId>
    <artifactId>phoenix-core</artifactId>
    <version>4.6.0-HBase-0.98</version>
</dependency>

  运行结果,如下所示:

4.总结

  就使用的结果来看,虽然满足了一些CRUD的操作,然其在HBase的基础上完成,过于依赖HBase,对其他存储介质的支持有限。总体来说, 对于HBase中已有数据,做标准的SQL操作来说,是足够了。另外,时延要求较高的业务,还是用HBase的API来完成,Phoenix虽说速度、性 能较快,毕竟不能严格意义上达到OLTP。

5.结束语

  这篇博客就和大家分享到这里,如果大家在研究学习的过程当中有什么问题,可以加群进行讨论或发送邮件给我,我会尽我所能为您解答,与君共勉!

相关实践学习
云数据库HBase版使用教程
&nbsp; 相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情:&nbsp;https://cn.aliyun.com/product/hbase &nbsp; ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库&nbsp;ECS 实例和一台目标数据库&nbsp;RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&amp;RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
目录
相关文章
|
4月前
|
Java 分布式数据库 Hbase
hbase系列
hbase系列
28 0
|
3月前
|
存储 Java 分布式数据库
什么是HBase?它的特点是什么?
什么是HBase?它的特点是什么?
97 0
|
4月前
|
存储 NoSQL 分布式数据库
|
NoSQL 大数据 分布式数据库
【HBase】(1)-HBase的安装
【HBase】(1)-HBase的安装
128 0
【HBase】(1)-HBase的安装
|
存储 分布式计算 安全
第8章 HBase应用
第8章 HBase应用
361 0
|
SQL 缓存 NoSQL
HBase问题答疑汇总(2021)
HBase问题答疑汇总(2021)
|
存储 NoSQL Java
HBase特点
HBase特点
136 0
|
存储 负载均衡 监控
从一无所知到5分钟快速了解HBase
从一无所知到5分钟快速了解HBase
196 0
从一无所知到5分钟快速了解HBase
|
Web App开发 存储 大数据
Hbase问题汇总与解答
今天早上分享了下HBase,分享的时候同事提出了一些问题,可能大部分有有这样的困惑,汇总下来: HBase问题汇总与解答 两个独立的服务器,一台用HDFS,一台不用HDFS可以吗?HDFS和Hbase必须要装在同一台服务器上吗? 答: As HBase runs on HDFS (and eac...
194254 0
|
分布式数据库 Apache 索引