hbase本身不支持SQL查询,为了实现这个功能,引入了phoenix,通过它可以实现hbase的sql查询。这里记录下如何配置并使用phoenix来操作hbase。
1. 下载地址
phoenix下载地址:http://apache.fayea.com/phoenix/。
注意:phoenix和hbase之前存在版本对应关系,我使用的hbase版本是1.1.3,所以我下载的phoenix版本是apache-phoenix-4.14.0-HBase-1.1-bin.tar.gz。
2. 配置phoenix
(1). 解压文件 tar -zxvf apache-phoenix-4.14.0-HBase-1.1-bin.tar.gz
(2). 拷贝phoenix-4.14.0-HBase-1.1-client.jar和phoenix-core-4.14.0-HBase-1.1.jar 这两个文件到hbase的lib目录下。
注意:如果hbase是集群模式部署,需要拷贝这两个文件到每个hbase的lib目录下。
(3). 复制hbase-site.xml文件到phoenix的bin目录下 apache-phoenix-4.14.0-HBase-1.1-bin/bin
(4). 重启hbase服务(必须重启hbase服务,否则phoenix将不能正常启动)
sh stop-hbase.sh
sh start-hbase.sh
3. 启动phoenix
进入到phoenix的bin目录下,执行命令./sqlline.py host:port
,其中host是主机名,port为zookeeper端口
如上图所示,已进入phoenix的控制台。
4. 用法简介
(1). !tables
命令可以查看有哪些表,注意:只能查询到通过phoenix创建的表,通过hbase创建的表无法看到
(2). 创建视图,将hbase上的表映射到phoenix中
#首先在hbase上创建一个表student,包含一个列簇info
hbase(main):004:0> create "student","info"
0 row(s) in 2.6890 seconds
=> Hbase::Table - student
#向student表中插入一行数据
hbase(main):009:0> put "student","001","info:name","tom"
0 row(s) in 0.0250 seconds
hbase(main):010:0> put "student","001","info:age","23"
0 row(s) in 0.0090 seconds
#接下来,进入phoenix的控制台,创建student的视图
0: jdbc:phoenix:node3:2181> create view "student"(rid varchar primary key,"info"."name" varchar,"info"."age" varchar);
#查询
0: jdbc:phoenix:node3:2181> select * from "student";
+------+-------+------+
| RID | name | age |
+------+-------+------+
| 001 | tom | 23 |
+------+-------+------+
1 row selected (0.326 seconds)