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:

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

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

  脚本如下所示:

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去访问,这里笔者给大家写了一个示例代码,如下所示:

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 - Phoenix剖析的更多相关文章

  1. Hbase+ Phoenix搭建教程

    Hbase+ Phoenix搭建教程 一.Hbase简介 HBase是基于列存储.构建在HDFS上的分布式存储系统,其主要功能是存储海量结构化数据. HBase构建在HDFS之上,因此HBase也是通 ...

  2. HBase Coprocessor 剖析与编程实践(转载http://www.cnblogs.com/ventlam/archive/2012/10/30/2747024.html)

    HBase Coprocessor 剖析与编程实践 1.起因(Why HBase  Coprocessor) HBase作为列族数据库最经常被人诟病的特性包括:无法轻易建立“二级索引”,难以执行求和. ...

  3. 从mysql向HBase+Phoenix迁移数据的心得总结

    * 转载请注明出处 - yosql473 - 格物致知,经世致用 mysql -> HBase + Phoenix 1.总体方案有哪些? 1)通过Sqoop直接从服务器(JDBC方式)抽取数据到 ...

  4. HBase学习之路 (九)HBase phoenix的使用

    HBase phoenix的下载 下载地址http://mirror.bit.edu.cn/apache/phoenix/ 选择对应的hbase版本进行下载,测试使用的是hbase-1.2.6版本

  5. HBase存储剖析与数据迁移

    1.概述 HBase的存储结构和关系型数据库不一样,HBase面向半结构化数据进行存储.所以,对于结构化的SQL语言查询,HBase自身并没有接口支持.在大数据应用中,虽然也有SQL查询引擎可以查询H ...

  6. HBase+Phoenix整合入门--集群搭建

    环境:CentOS 6.6 64位    hbase 1.1.15  phoenix-4.7.0-HBase-1.1 一.前置环境: 已经安装配置好Hadoop 2.6和jdk 1.7 二.安装hba ...

  7. SHDP--Working with HBase(三)之HBase+Phoenix实现分页

    先简单讲讲只用HBase来实现分页的思路: HBase利用scan来扫描表,通过startKey,stopKey来确定扫描范围,在需要进行分页时可以结合HBase提供的PagefFilter过滤扫描的 ...

  8. hbase + phoenix 单机版安装

    1. 环境: centos 6.5 jdk 1.8.0                                                 http://www.oracle.com/te ...

  9. Centos 下 Apache 原生 Hbase + Phoenix 集群安装(转载)

    前置条件 各软件版本:hadoop-2.7.7.hbase-2.1.5 .jdk1.8.0_211.zookeeper-3.4.10.apache-phoenix-5.0.0-HBase-2.0-bi ...

随机推荐

  1. 标签控制器  UITabBarController

    UITabBarController和UINavigationController类似,UITabBarController也可以轻松地管理多个控制器,轻松完成控制器之间的切换.   #import ...

  2. JBoss 系列四十八:JBoss 7/WildFly 使用TCP构建集群

    我知道JBoss 集群Default 的设定就是UDP(JGroups),但在实际环境中的网络环境时常不允许UDP,在这种情况下,我们就需要使用TCP. JBoss 7/WildFly 中负责集群的主 ...

  3. Lzlib 1.5 正式发布,C 语言压缩算法库

    Lzlib 1.5 正式发布,该版本移除了对废弃版本 0 文件的解压支持:修复了 struct LZ_Encoder 和 LZ_compress_sync_flush 相关的 bug. Lzlib 压 ...

  4. ContentControl 与 ViewModel (二)

    上文说到 可以使用DataTemplateSelector. 其实等于是用 DataTemplateSelector + 动态创建DataTemplate来实现. using System; usin ...

  5. quartznet笔记

    http://sourceforge.net/projects/quartznet/files/quartznet/

  6. 理解 Soap

    http://www.cnblogs.com/yhuang/archive/2012/04/04/share_storm.html 自己也写了下: using System; using System ...

  7. [ucgui] 对话框8——Framewin小工具

    >_<" 这里主要是窗口小工具Framewin的用法介绍,包括创建背景窗口及其消息回调函数,创建Frame窗口并设置其回调函数,这里一些其他的功能被我注释掉了,有向状态栏添加最大 ...

  8. PAAS平台构建7×24小时高可用应用的方案设计

    本博客迁移到部署在jae上的独立博客系统wordpress,博客地址:点击打开独立博客.欢迎大家一起来讨论IT技术. 现在很多企业都在搭建自己的私有PAAS平台,当然也有很多大型互联网公司搭建共有PA ...

  9. C#与数据库访问技术总结(五)之Command对象的常用方法

    Command对象的常用方法 说明:上篇总结了Command对象的几个数据成员,这节总结Command对象的常用方法. 同样,在不同的数据提供者的内部,Command对象的名称是不同的,在SQL Se ...

  10. hive学习3(hive基本操作)

    hive基本操作 hive的数据类型 1)基本数据类型 TINYINT,SMALLINT,INT,BIGINT FLOAT/DOUBLE BOOLEAN STRING 2)复合类型 ARRAY:一组有 ...