1. 简介
Apache Phoenix,是由saleforce.com开源的一个项目,后又捐给了Apache基金会。它相当于一个Java中间件,提供jdbc连接,操作hbase数据表,Phoenix 使得Hbase 支持通过JDBC的方式进行访问,并将你的SQL查询转换成Hbase的扫描和相应的动作。
兼容性:
- Phoenix 2.x - HBase 0.94.x
- Phoenix 3.x - HBase 0.94.x
- Phoenix 4.x - HBase 0.98.1+
2. 安装
hadoop2.5.1
hbase0.98.6.1
phoenix-4.4.0-HBase-0.98/
- download and expand our installation tar
- copy the phoenix jar into the HBase lib directory of every region server
- restart the region servers
- add the phoenix client jar to the classpath of your HBase client
- download and setup SQuirrel as your SQL client so you can issue adhoc SQL against your HBase cluster
2.1下载
官网下载地址:http://www.apache.org/dyn/closer.cgi/phoenix/
2.2解压
上传到主节点指定目录下解压:
tar –zxvf phoenix-4.4.0-HBase-0.98-bin.tar.gz
2.3拷贝文件
将phoenix-4.4.0-HBase-0.98-server.jar拷贝到hbase集群的lib目录下
重启hbase集群,使其生效
2.4验证
cd /usr/local/phoenix-4.4.0-HBase-0.98-bin/bin
./sqlline.py 192.168.0.177
success
3. 创建表和视图
phoenix操作hbase,我们有两种方式,创建表,创建视图。
创建表的话,可读可写,就可以对HBase进行插入,查询,删除操作。
视图的话,是只读的,一般就只可以进行查询操作
虽然看起来,表的功能,比视图更强大一些。但是就像是mysql等关系型数据库一样,删除表操作,会将表删掉。但是删除视图操作,却不会影响原始表的结构。
因为使用phoenix,创建表后,会自动和hbase建立关联映射。当你使用phoenix删除和hbase之间的关系时,就会将hbase中的表也删掉了
所以如果只是用到查询功能,只需要建立视图就ok了。
创建表
create htablename( --这句话直接写就可以了,这样的话,HBase中的RowKey转换成phoenix中的主键,列名就叫 pk。 --rowkey自动会和primary key进行对应。 pk VARCHAR primary key null, --将名为cf的columnFamily下,字段名为col1的字段,写在这里。 "cf"."col1" VARCHAR null, --将名为cf的columnFamily下,字段名为col2的字段,写在这里。。。下面就以此类推 "cf"."col2" VARCHAR null, "cf2"."col3" VARCHAR null, "cf2"."col4" VARCHAR null )
创建hbase中已存在表的视图
CREATE VIEW "login_log" ( pk VARCHAR PRIMARY KEY,"login"."usr" VARCHAR, "login"."timestamp" VARCHAR, "login"."ip" VARCHAR, "login"."province" VARCHAR, "login"."city" VARCHAR, "login"."district" VARCHAR, "login"."success" VARCHAR, "login"."type" VARCHAR)DEFAULT_COLUMN_FAMILY='login';
注意:phoenix区分大小写
"login_log" 用双引号是因为hbase中表名为login_log,为小写,双引号使创建的视图为小写,与hbase表对应。
如此处不加双引号,则创建的视图为LOGIN_LOG
字段也如此。
4. SQuirreL
第一步: 下载安装SQuirreL SQL Client : http://www.squirrelsql.org/
第二步: 拷贝phoenix-{version}-client.jar 和 phoenix-core-{version}.jar到SQuirreL 安装目录下的lib文件夹下,这两个jar可以在phoenix的安装目录下找到。
第三步: 打开SQuirreL , 点击Drivers,新建一个driver:
name : 可以自定义一个名称
Example URL : 这个是为了让你新建一个连接的时候作为提示用的
Java Class Path : 这个需要选中之前上传的JAR
Class Name: org.apache.phoenix.jdbc.PhoenixDriver
第四步:创建Aliases(就是创建一个hbase的connection):
Name: 可以自定义
Driver: 选择之前配置好的phoenix driver
URL: 这里初始化显示的是之前配置的Example URL, 可以在这里做具体的修改,192.168.0.177修改为zk地址
配置好以后点击Test,输入服务器用户名、密码,测试连接,连接成功后进入如下页面:
查询已创建的视图:
此处只有一级索引,在通过非rowkey进行查询时查询速度会比较慢,300W数据会在10s左右,目前的Phoenix已支持二级索引,通过二级索引进行查询会实现毫秒级响应,下篇会介绍Phoenix二级索引的创建