phoenix入门

Apache Phoenix是一个开源的SQL引擎,用于简化HBase的访问。它提供了与传统数据库相似的JDBC接口,支持SQL操作,适用于OLAP场景。Phoenix通过编译SQL为HBase的扫描操作、优化查询、并行执行等方式提高了性能。虽然不支持事务和复杂条件,但可以通过创建索引来提升非主键字段查询性能。本文介绍了Phoenix的安装、4种调用方式(批处理、命令行、GUI、JDBC)、数据操作(包括插入、更新、查询、删除)以及Schema操作,如创建表、映射表、视图和索引。
摘要由CSDN通过智能技术生成

1、为什么使用Phoenix

phoenix,由saleforce.com开源的一个项目,后又捐给了Apache。它相当于一个Java中间件,帮助开发者,像使
用jdbc访问关系型数据库一些,访问NoSql数据库HBase。

phoenix,操作的表及数据,存储在hbase上。phoenix只是需要和Hbase进行表关联起来。然后再用工具进行一些读或写操作。

其实,可以把Phoenix只看成一种代替HBase的语法的一个工具。虽然可以用java可以用jdbc来连接phoenix,然
后操作HBase,但是在生产环境中,不可以用在OLTP(在线事务处理)中。在线事务处理的环境中,需要低延迟,而Phoenix在查询HBase时,虽然做了一些优化,但延迟还是不小。所以依然是用在OLAP(联机分析处理)中,再将结果返回存储下来。

Phoenix是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,
查询你的HBase数据。 Phoenix是构建在HBase之上的SQL引擎。你也许会存在“Phoenix是否会降低HBase的效
率?”或者“Phoenix效率是否很低?”这样的疑虑,事实上并不会,Phoenix通过以下方式实现了比你自己手写的方
式相同或者可能是更好的性能(更不用说可以少写了很多代码):

  • 编译你的SQL查询为原生HBase的scan语句
  • 检测scan语句最佳的开始和结束的key
  • 精心编排你的scan语句让他们并行执行
  • 让计算去接近数据通过
  • 推送你的WHERE子句的谓词到服务端过滤器处理
  • 执行聚合查询通过服务端钩子(称为协同处理器)

除此之外,Phoenix还做了一些有趣的增强功能来更多地优化性能:

  • 实现了二级索引来提升非主键字段查询的性能
  • 统计相关数据来提高并行化水平,并帮助选择最佳优化方案
  • 跳过扫描过滤器来优化IN,LIKE,OR查询
  • 优化主键的来均匀分布写压力

phoenix不能干嘛:

  • 不支持事务处理
  • 不支持复杂的条件

2、Phoenix的安装

下载:
http://archive.apache.org/dist/phoenix/

安装:
1、在mini1上上传压缩包并解压到/apps下(考虑版本兼容性的问题)
2.将Phoenix下的jar包
phoenix‐4.13.1‐HBase‐1.2‐client.jar
phoenix‐core‐4.13.1‐HBase‐1.2.jar
拷贝到所有的regionsever服务所在服务器的hbase的安装目录下的lib目录中
3.将hbase‐site.xml拷贝到Phoenix的bin目录下
3.1 加入配置(hbase‐site.xml中)
Phoenix中是没有Database的概念的,所有的表都在同一个命名空间。当然,Phoenix4.8开始支持多个命名空间
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
这里一定要注意:如果设置为true,创建的带有schema的表将映射到一个namespace,这个需要客户端和服务端同时设
置。一旦设置为true,就不能回滚了。旧的客户端将无法再正常工作。所以建议大家都查看官方文档,确定后再进行设
置。
3.2.所有的hbase‐site.xml都需要加入这两项配置(包括hbase的HMaster和HRegionServer)
4.进入到Phoenix的bin目录下启动Phoenix。 sqlline.py mini1:2181(指定zookeeper,指定一台即可)
报错
Traceback (most recent call last):
File "./sqlline.py", line 27, in <module>
import argparse
ImportError: No module named argparse
5.在mini1上 yum ‐y install python‐argparse   (不报错可以不用安装)
5.启动hbase
6.启动phoenix。 sqlline.py mini1:2181

可能会报错
Traceback (most recent call last):
File "./sqlline.py", line 27, in <module>
import argparse
ImportError: No module named argparse
解决:
yum ‐y install python‐argparse   (不报错可以不用安装)
 

3、Phoenix的使用

3.1 phoenix的4种调用方式

3.1.1 批处理方式

首先创建us_population.sql文件,里面的创建一个名为us_population的表

[root@hadoop01 phoenix-4.13.1]# vi ./sql/us_population.sql

CREATE TABLE IF NOT EXISTS us_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city));


CREATE TABLE IF NOT EXISTS ak_population (
state CHAR(2) NOT NULL,
city VARCHAR NOT NULL,
population BIGINT
CONSTRAINT my_pk PRIMARY KEY (state, city));

接下来新建一个数据文件us_population.csv。

要加载的所有CSV文件都必须具有".csv"文件扩展名,同样phoenix也支持mr做一个批量数据导 入主键就是hbase
对应的rowkey,为了保证hbase主键的唯一性,可以设置多个字段为主键。

没有指定表的名称,他根据文件名称来找对应的表

[root@hadoop01 phoenix-4.13.1]# vi ./sql/us_population.csv

NY,New York,8143197
CA,Los Angeles,3844829
IL,Chicago,2842518
TX,Houston,2016582
PA,Philadelphia,1463281
AZ,Phoenix,1461575
TX,San Antonio,1256509
CA,San Diego,1255540
TX,Dallas,1213825
CA,San Jose,912332

创建一个ak.csv
通过-t参数指定表名

[root@hadoop01 phoenix-4.13.1]# vi ./sql/ak.csv

AK,kenai,450283
AK,haines,370283
AK,fairbanks,390283

最后创建一个查询sql文件us_population_queries.sql

[root@hadoop01 phoenix-4.13.1]# vi ./sql/us_population_queries.sql

SELECT state as "State",count(city) as "City Count",sum(population) as "Population Sum"
FROM us_population
GROUP BY state
ORDER BY sum(population) DESC;

执行命令为:

[root@hadoop01 phoenix-4.13.1]# ./bin/psql.py hadoop01:2181 ./sql/us_population.sql ./sql/us_population.csv ./sql/us_population_queries.sql  创建表,加载数据,查询
或者先把表创建好(sql和数据放到同一层目录),然后再单独执行查询命令即可
[root@hadoop01 phoenix-4.13.1]# ./bin/psql.py us_population.sql    创建表
[root@hadoop01 phoenix-4.13.1]# ./bin/psql.py hadoop01:2181 ./sql/us_population.sql ./sql/ak_population.csv  创建表,加载表对应文件的数据
[root@hadoop01 phoenix-4.13.1]# ./bin/psql.py ./sql/us_population_queries.sql

注意:

1、命令中的us_population.sql和us_population.csv必须同名

2、通过Phoenix建的表都会自动转成大写,如果需要使用小写的表,请使用create table "tablename"

3、安装了Phoenix之后,系统会自在四张系统表

4、在Phoenix中创建的表同时会在HBase中创建一张表与之对应,并且需要使用psql.py脚本加载数据

3.1.2 命令行方式

使用 ./sqlline.py mini1:2181 登录到Phoenix的shell中,可以使用正常的SQL语句进行操作

  • 可以使用!table查看表信息
  • 使用 !describe tablename 可以查看表字段信息
  • 使用 !history可以查看执行的历史SQL
  • 使用 !dbinfo 可以查看Phoenix所有的属性配置
  • 使用 !help 可以查看Phoenix所有的属性配置
  • 使用!indexes tablename 列出指定表名的所有索引

除了上面这些以外之外还有很多其他操作,可以用过help查看。

!all                Execute the specified SQL against all the current
                    connections
!autocommit         Set autocommit mode on or off
!batch              Start or execute a batch of statements
!brief              Set verbose mode off
!call               Execute a callable statement
!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值