Phoenix安装介绍与常用命令

Phoenix介绍

目标:了解什么是Phoenix
phoenix,中文译为“凤凰”,很美的名字。Phoenix是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表。Phoenix是一个HBase的开源SQL引擎。你可以使用标准的JDBC API代替HBase客户端API来创建表,插入数据,查询HBase数据。
支持SQL的还有Hive和Impala。但是Hive和Impala还可以查询文本文件,Phoenix只能查Hbase。
Phoenix是构建在HBase之上的SQL引擎。其查询效率相同或高于Hbase原生查询性能,同时提高了开发效率,降低学习成本。除此之外,Phoenix还做了一些增强功能来更多地优化性能,例如二级索引、跳过扫描过滤器优化IN,LIKE,OR查询、优化主键。

Phoenix的安装部署

1 、提前安装好ZK集群、hadoop集群、Hbase集群
2、从对应的地址下载:http://mirrors.cnnic.cn/apache/phoenix/
这里我们使用的是:apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz

在这里插入图片描述
3、上传、解压
将对应的安装包上传到对应的Hbase集群其中一个服务器的/export/softwares目录下
解压:tar zxvf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz -C /export/servers/
重命名:mv apache-phoenix-4.14.0-cdh5.14.2-bin/ phoenix
4、配置
(1) 将phoenix目录下的phoenix-4.14.0-cdh5.14.2-server.jar拷贝到各个 hbase的lib目录下。
在hbase 配置值文件hbase-site.xml文件中添加配置

<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>zookeeper.znode.parent</name>
<value>/hbase</value>
</property>

同步至所有hbase节点后,将hbase-site.xml拷贝到phoenix/bin目录下

(2)重启hbase集群,使Phoenix的jar包生效。
5、验证是否成功
在phoenix/bin下输入命令:
端口可以省略
[root@node01 bin]# ./sqlline.py node01:2181
出现如下界面说明启动成功
在这里插入图片描述
输入!tables 查看都有哪些表。SYSTEM为Phoenix系统表,系统表中维护了用户表的元数据信息。
在这里插入图片描述
退出Phoenix。输入!quit 或!q
在这里插入图片描述

使用help可以打印出所有命令
在这里插入图片描述
!all 对所有当前连接执行指定的SQL
!autocommit 打开或关闭自动提交模式
!batch 启动或执行一批语句
!brief 关闭详细模式
!call 执行可调用语句
!close 关闭与数据库的当前连接
!closeall 关闭所有当前打开的连接
!columns 列出指定表的所有列
!commit 提交当前事务(如果自动提交已关闭)
!connect 打开与数据库的新连接。
!dbinfo 提供有关数据库的元数据信息
!describe 描述一个表
!dropall 删除当前数据库中的所有表
!exportedkeys 列出指定表的所有导出键
!go 选择当前连接
!help 打印命令使用情况摘要
!history 显示命令历史记录
!importedkeys 列出指定表的所有导入键
!indexes 列出指定表的所有索引
!isolation 为此连接设置事务隔离
!list 列出当前连接
!manual 显示sqlline手册
!metadata 获取元数据信息
!nativesql 显示指定语句的本机SQL
!outputformat 设置显示结果的输出格式(表格、垂直、csv、tsv、xmlattrs、xmleelements)
!primarykeys 列出指定表的所有主键
!procedures 列出所有程序
!properties 连接到属性文件中指定的数据库
!quit 退出程序
!reconnect 重新连接到数据库
!record 将所有输出记录到指定文件
!rehash 获取用于完成命令的表和列名称
!rollback 回滚当前事务(如果关闭自动提交)
!run 从指定的文件运行脚本
!save 保存当前变量和别名
!scan 扫描已安装的JDBC驱动程序
!script 开始将脚本保存到文件
!set 设置sqlline变量

Phoenix常用命令

创建phoenix表
create table if not exists testtable(
A bigint not null,
B double,
C varchar(200),
D varchar(200)
CONSTRAINT testtable PRIMARY KEY(A));

查看表结构
!desc testtable;

删除表
drop table testable;

向表添加数据
python /export/servers/phoenix-4.14.0-cdh5.14.2/bin/psql.py -t testable node01 /opt/xxx.csv

数据查询
Select * from testable where A> 100;

Phoenix索引

在海量数据背景下,查询数据快速返回是典型的应用场景。在phoenix数据表基础之上创建索引,能够大幅提高数据的查询效率。Phoenix支持的索引有三个类型,分别是覆盖索引、全局索引、本地索引。

A: 覆盖索引Covered Index
覆盖索引要求查询语句中的条件字段、查询字段都必须创建过索引,否则就会触发“全局扫描”(full table scan)
创建语法:create index coverindex user_index on user (name) include (age);
因此它的特点是:只需要通过索引就能返回所要查询的数据 。

B: 全局索引Global indexes
global是默认的索引格式。

全局索引适用于多读少写的场景,在写操作上会给性能带来极大的开销,因为所有的更新和写操作(DELETE,UPSERT VALUES和UPSERT SELECT)都会引起索引的更新,在读数据时,Phoenix将通过索引表来达到快速查询的目的。如;

create index userid_index on user (userid);
它有一个缺陷,如果查询语句中的条件字段或查询字段不是索引字段,就会触发全表扫描。例如:select userid,name from user where userid='8960321’

解决办法有两个:
一是和覆盖索引一样,创建索引时把查询的相关字放入段include来。
create index userid_index on user (userid) include (name );

二是强制使用索引:
select /*+ index(user,userid_index) */ name FROM user userid='8960321’;

制使用索引的查询语句会导致二次检索数据表,第一次检索是去索引表中查找符合userid='8960321’的数据,此时候发现 name 字段并不在索引字段中,会去user 表中第二次扫描name。因此只有当用户明确知道name符合检索条件的数据较少的时候才适合使用,否则会造成全表扫描,对性能影响较大。

C: 本地索引Local Indexing
与Global Indexing不同,本地索引适用于写多读少的场景,当使用Local Indexing的时候即使查询的所有字段都不在索引字段中时也会用到索引进行查询,Phoneix在查询时会自动选择是否使用本地索引(这是由Local Indexing自动完成的)。

create local index user_Index on user (userid,name);

D: 索引常用操作

查看表索引
!index “harve_user”;

删除索引
drop index user_Index on user;

E: 索引有序性
创建的索引字段的顺序,与查询语句条件字段的顺序,两者之间的对应关系对索引是否生效有较大影响。
查询语句条件字段的顺序尽量与索引的顺序相同。索引的首字段在查询条件中尽量第一个出现。

测试
创建测试表
create table if not exists testdata(
A bigint not null,
B bigint,
C bigint,
D bigint,
E bigint,
F bigint,
G bigint,
H bigint,
I bigint
CONSTRAINT testdata PRIMARY KEY(A));

加载一千万数据
python /export/servers/phoenix-4.14.0-cdh5.14.2/bin/psql.py -t TESTDATA node01 TestDatas.csv

创建索引
CREATE INDEX testdataindex ON testdata (B,C,D,E,F)

发布了46 篇原创文章 · 获赞 207 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/weixin_42518541/article/details/103763719