Phoenix的安装和使用

Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。 这样在查询Hbase的时候会方便很多.

Phoenix的安装

1,下载Phoenix

图片

在官网中选择对应的版本下载,因为我的Hbase是1.4.9的,所以我下载的是apache-phoenix-4.14.3-HBase-1.4这个版本.

图片

2,上传安装包并解压

tar -zxvf  apache-phoenix-4.14.3-HBase-1.4-bin.tar.gz

mv apache-phoenix-4.14.3-HBase-1.4-bin.tar.gz  phoenix-4.14.3

3,复制phoenix的相关包到hbase的lib下面

把下面3个jar包复制到hbase集群的region server 和 master server lib目录(其实只用复制到master所在的节点就行)

phoenix-4.14.3-HBase-1.4-client.jar,

phoenix-4.14.3-HBase-1.4-server.jar,

phoenix-core-4.14.3-HBase-1.4.jar

4,复制hbase-site.xml到phoenix下

图片

5,重启hbase集群

./stop-hbase.sh

./start-hbase.sh

6,验证phoenix是否安装成功

./sqlline.py master:2181,当然你也可以不用指定主机和端口,默认就本机.

图片

到这里说明phoenix就安装成功了.

phoenix的使用

7,phoenix和hbase建映射表

输入!table列出所有的表,发现hbase中的表,并没有显示出来,但是使用phoenix sql创建的表却可以显示,这是因为 Phoenix 无法自动识别 HBase 中原有的表,所以需要将 HBase 中已有的做映射,才能够被 Phoenix 识别并操作

我们先查一下hbase里面有哪些表 list

图片

在phoenix 中创建一个hbase的映射表test1,建表语句如下

create table “test1″(“ROW” varchar primary key,”F1″.”name” varchar,”F1″.”age” varchar ,”F1″.”address” varchar,”F1″.”city” varchar,”F1″.”money” varchar,”F1″.”timestamp” varchar);

需要注意的是phoenix里面是区分大小写的,如果我们不加引号,则默认会显示大写,所以要在表名,列簇,列名上都加引号.

表名要和 HBase 中建立的表名保持一致。HBase 默认的主列名是 ROW,所以要将“ROW”设置为主键。列簇和列名也要用双引号括起来,要不然小写会自动变成大写。

8,用select语句查询数据

select * from “test1” ;

SQL里面的表名也需要加引号,否则的话会报下面的错

图片

因为不加引号的话,Phoenix会自动转成大写,就是TEST1,但是Phoenix里面的表test1是小写的,所以TEST1是不存在的,就会报错.

你也可能会遇到查询不到数据的情况,这是因为在 4.10 版本之后,Phoenix 对列的编码方式有所改变,在Phoenix里面的列名和hbase里面的列名不是一个东西,所以查询不到数据,解决的办法就是在创建表的时候 需要设置 COLUMN_ENCODED_BYTES属性为 0,即不让 Phoenix 对 column family 进行编码。

建表语句如下所示:

create table “test1″(“ROW” varchar primary key,”F1″.”name” varchar,”F1″.”age” varchar ,”F1″.”address” varchar,”F1″.”city” varchar,”F1″.”money” varchar,”F1″.”timestamp” varchar)column_encoded_bytes=0;

这样就可以查到数据了

图片

但是需要注意的是,如果你在建表的时候没有加这个属性,后面想修改,这个好像是不能修改的,如果你要删了表重建,则hbase里面的表也会被删除,数据就会丢失,所以在建表的时候一定要注意这个问题.

8,phoenix和hbase建映射视图

如果只做查询操作的话,建议大家使用视图映射的方式,而非表映射。因为一旦出现问题,数据会丢失,但是删除视图,hbase的表是不会删除的.

建表语句和表的建表语句基本一样,只是关键字不一样

create view “test1″(“ROW” varchar primary key,”F1″.”name” varchar,”F1″.”age” varchar ,”F1″.”address” varchar,”F1″.”city” varchar,”F1″.”money” varchar,”F1″.”timestamp” varchar);

查询数据

图片

9,phoenix分组聚合查询

图片

当然phoenix还支持很多的SQL,具体的SQL语法可以查看官网的文档,

http://phoenix.apache.org/language/index.html

总结:

1,hbase的表需要和phoenix做映射,才可以使用

2,phoenix区分大小写,需要在字段,表名,列名,上面加引号,包括SQL里面的count的字段,group by的字段,都需要加引号

3,删除phoenix中的表,会把hbase里的表删掉,删除phoenix的视图,不会删除hbase中的表.建议使用视图.

阅读原文

简介:主要专注于实时计算领域 会不定时更新 Flink Spark 系列原理以及源码分析的文章。欢迎关注微信公众号:JasonLee实时计算
(0)
打赏 喜欢就点个赞支持下吧 喜欢就点个赞支持下吧

声明:本文来自“JasonLee实时计算”,分享链接:https://www.zyxiao.com/p/302051    侵权投诉

网站客服
网站客服
内容投稿 侵权处理
分享本页
返回顶部