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-HBase-0.98][下载地址]

  然后,将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.结束语

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

联系方式: 
邮箱:smartloli.org@gmail.com 
Twitter:https://twitter.com/smartloli 
QQ群(Hadoop - 交流社区1):424769183 
温馨提示:请大家加群的时候写上加群理由(姓名+公司/学校),方便管理员审核,谢谢!

热爱生活,享受编程,与君共勉!

本文转自哥不是小萝莉博客园博客,原文链接:http://www.cnblogs.com/smartloli/,如需转载请自行联系原作者

HBase - Phoenix剖析相关推荐

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

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

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

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

  3. phoenix hbase java_java jdbc访问hbase phoenix

    上面直接介绍了druid访问hbase phoenix的案例hbase Phoenix整合mybatis DruidDataSource 这里还是贴一下jdbc直接访问的方式.public stati ...

  4. hbase+phoenix

    hbase+phoenix 操作hbase 操作phoenix 报错 hbase+phoenix集成 前置条件 需要hadoop+hbase+zookeeper集群环境(我用的是HA) 集群环境部署详 ...

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

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

  6. docker-compose HBase + Phoenix 开发环境单机快速部署

    下载地址 https://gitee.com/assad/docker-hbase.git 项目介绍 基于 big-data-europe 的仓库代码修改,主要升级了 HBase 版本到 2.X, 增 ...

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

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

  8. HBase phoenix二级索引

    1. 为什么需要用二级索引? 对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询.如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫瞄.对于较大的表 ...

  9. Hbase+Phoenix使用总结

    1.Hbase中表名和列族名是大小写敏感的 如果使用小写的表名那么必须加上双引号.表名和列族名是大写则不需要双引号 2.Phoenix查询客户端超时 Error: Operation timed ou ...

最新文章

  1. Visual Studio中的快捷键
  2. 01-1制作U盘启动盘--大白菜超级U盘启动盘制作工具
  3. centos 安装php5.6
  4. 渗透知识-linux基础命令
  5. 四大微博OAuth认证
  6. windows和linux互传文件,用户配置文件和密码配置文件,用户和组管理
  7. 纪中在家培训总结(2020.2.1~2020.2.24)
  8. win7计算机无法最大化,主编教您win7游戏无法全屏怎么办
  9. [原创] Wireshark工具培训
  10. Oracle:Authid Current_User使用
  11. Flutter BuildOwner之inactive Elements浅析
  12. SHELL递归遍历文件夹下所有文件
  13. Python代码编辑器jupyter的安装
  14. KGB Messenger解题流程
  15. 01-SA8155 QNX 虚拟机Hypervisor
  16. 12月17号英语学习
  17. 使用代理爬去微信公众号_微信公众号怎么去推广运营?企业微信公众号要如何运营?微信公众号运营技巧,你get了吗?微信怎么去推广运营?...
  18. 江西省2021年工业互联网安全技术技能大赛
  19. 如何吸引全球级「AI大咖」,BAT等大佬怎么说?
  20. 消防应急疏散指示系统的应用场景有哪些?

热门文章

  1. 22. linux 常用命令
  2. [Tool] 使用CodeMaid自動程式排版 - 摘自网络
  3. [转载] 全本张广泰——第十七回 夫人诱广泰 血溅洪洞县
  4. Mastercam X4中文版三维造型设计基础与典型范例
  5. 2010年终总结---戏说茅台酒涨价
  6. 【oracle笔记3】多表查询
  7. greenplum安装札记(待完善)
  8. 获取基目录,它由程序集冲突解决程序用来探测程序集
  9. 【算法题】天平砝码称重
  10. 100c之50:到底谁在说谎