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中的表.建议使用视图.
声明:文中观点不代表本站立场。本文传送门:https://eyangzhen.com/247112.html