Phoenix简介

序言

前文说到Hbase没有类似ORM这类的东西,操作查询全靠java逻辑,很不方便。所以横空出世了Phoenix。

Phoenix与HBase中的表是独立的,两者之间没有必然的关系。

如果要通过Phoenix操作Hbase中的表则需要在Phoenix的系统表中加入Hbase的相关信息。实际上Phoenix也是通过这种形式来查询Hbase中的表的,这样子看来Phoenix有点像数据表中的Hmaster,cuiyaonan2000@163.com

Phoenix创建表时会自动调用HBase客户端创建相应的表(使用hbase client api),创建八张系统表这些表也是创建在HBase中的表,只是所属对象是Phoenix):

  1. SYSTEM.CATALOG(其中SYSTEM.CATALOG表用于存放Phoenix创建表时的元数据即用于存储记录Hbase中的表如此才能操作关联Hbase
  2. SYSTEM.FUNCTION
  3. SYSTEM.LOG
  4. SYSTEM.SEQUENCE
  5. SYSTEM.STATS
  6. SYSTEM.CHILD_LINK
  7. SYSTEM.TASK

并且在SYSTEM.CATALOG系统表中记录Phoenix创建表时的元数据:

  1. 其主键的值对应HBase的RowKey
  2. 非主键的列对应HBase的Column
  3. 列族不指定时为0,且列会进行编码
  4. 如果是通过Phoenix创建的表那么必须通过Phoenix客户端来对表进行操作,因为通过Phoenix创建的表其非主键的列会进行编码---------------这样我们的代码中就需要维护2个客户端,A:phoenix客户端 B:Hbase客户端

简介

Phoenix是一个开源的HBASE SQL层(即Phoenix是应用层和Hbase的中间件cuiyaonan2000@163.com)。

它不仅可以使用标准的JDBC API替代HBASE client API创建表插入查询HBASE,也支持二级索引事务以及多种SQL层优化。

Phoenix使用JAVA语言进行编写,其查询引擎会将SQL查询语句转换成一个或多个HBase Scanner且并行执行生成标准的JDBC结果集

  1. Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。
  2. Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。
  3. 直接使用HBase API、协同处理器与自定义过滤器,对于简单查询来说,其性能量级是毫秒对于百万级别的行数来说,其性能量级是秒

HBase的查询工具有很多,如:Hive、Tez、Impala、Spark SQL、Phoenix等。

Phoenix通过以下方式使我们可以少写代码,并且性能比我们自己写代码更好

  • 将SQL编译成原生的HBase scans。
  • 确定scan关键字的最佳开始和结束
  • 让scan并行执行
  • ...

部署(因为是内嵌所以比较简单

由于Phoenix是内嵌在HBase的JDBC驱动,且HBase是通过JAVA语言编写的,其基于HDFS,且依赖于Zookeeper进行服务的协调和HA高可用配置,因此~~~~~~~~~~~~~~~~~~~~~.

根据hbase选择指定的版本

#下载
[root@cuiyaonan2000 phoenix] wget https://mirrors.tuna.tsinghua.edu.cn/apache/phoenix/phoenix-5.1.1/phoenix-hbase-2.3-5.1.1-bin.tar.gz

#解压
#将解压后的phoenix-server-hbase-2.3-5.1.1.jar 放置到各个节点的hbase的lib文件夹下
[root@cuiyaonan2000 phoenix] tar -zxvf phoenix-hbase-2.3-5.1.1-bin.tar.gz 

  1. 将解压后的phoenix-server-hbase-2.3-5.1.1.jar 放置到各个节点的hbase的lib文件夹下
  2. 重启hbase(当HBase集群启动时将会加载Phoenix,并加载hbase-site.xml配置文件(存放HBase和Phoenix的配置),此时可以使用Phoenix客户端进行连接,通过标准的JDBC来操作HBase)
  3. Phoenix第一次启动时,会在HBase中创建八张系统表,用于存放Phoenix的相关信息。

验证(phoenix的命令是: ! + 英文 的模式

部署完成后再phoenix的bin目录下执行命令:

#登录phoenix
[root@cuiyaonan2000 phoenix] ./sqlline.py  zookeeper的ip不包含端口




# 执行脚本命令示例
[root@cuiyaonan2000 phoenix] sqlline.py localhost ../examples/stock_symbol.sql



#退出phoenix客户端命令
!quit

显示如下内容:

输入!tables 可以看到phoenix已经在hbase中创建了8张表,用于管理自身的数据和管理hbase的表--其中catalog是重点表

同时查看hbase的管理界面,可以看到如上的表其实是建立在了hbase上

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

cuiyaonan2000

给包烟抽吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值