Phoenix使用 Phoenix是构建在HBase上的一个SQL层,能让我们用标准的JDBC APIs而不是HBase客户端APIs来创建表,插入数据和对HBase数据进行查询。Phoenix完全使用Java编写,作为HBase内嵌的JDBC驱动。Phoenix查询引擎会将SQL查询转换为一个或多个HBase扫描,并编排执行以生成标准的JDBC结果集。
一、安装
下载 apache-phoenix-4.15.0-HBase-1.4-bin.tar.gz,使用传输工具将下载的tar包上传到hbase集群的master结点中。
tar开,并放到自己想要的路径下
$tar -zxvf apache-phoenix-4.15.0-HBase-1.4-bin.tar.gz $sudo mv apache-phoenix-4.15.0-HBase-1.4-bin /soft/phoenix
添加 phoenix-[version]-server.jar 到所有master和regionserver的lib/下,并重启hbase
[wbw@s201 /soft/phoenix]$sudo cp phoenix-4.15.0-HBase-1.4-server.jar /soft/hbase/lib/ [wbw@s201 /soft/phoenix]$scp -r phoenix-4.15.0-HBase-1.4-server.jar wbw@s202:/soft/hbase/lib/ [wbw@s201 /soft/phoenix]$scp -r phoenix-4.15.0-HBase-1.4-server.jar wbw@s203:/soft/hbase/lib/ [wbw@s201 /soft/phoenix]$scp -r phoenix-4.15.0-HBase-1.4-server.jar wbw@s204:/soft/hbase/lib/ $stop-hbase.sh $start-hbase.sh
二、命令行使用 2.1 进入命令行 进入phoenix的bin目,录执行$./sqlline.py master 其中的master为Zookeeper所在节点的主机名。
[wbw@s201 /soft/phoenix/bin]$./sqlline.py s202
2.2 !tables 自动生成的Phoenix系统表。
2.3 !help 帮助
2.4 !exit 退出
三、语法 官方语法:http://phoenix.apache.org/language/index.html
注意 :无论列名还是表名有大小写区分,若为小写需要用双引号,否则默认转大写。
3.1 建表 create table "test" ( "Row" INTEGER PRIMARY KEY , "cf1" ."name" VARCHAR , "cf1" ."sex" VARCHAR , "cf2" ."age" VARCHAR , "cf2" ."address" VARCHAR );
命令行显示:
0: jdbc:phoenix:s202> create table "test"( . . . . . . . . . . > "Row" INTEGER PRIMARY KEY, . . . . . . . . . . > "cf1"."name" VARCHAR, . . . . . . . . . . > "cf1"."sex" VARCHAR, . . . . . . . . . . > "cf2"."age" VARCHAR, . . . . . . . . . . > "cf2"."address" VARCHAR . . . . . . . . . . > ); No rows affected (3.456 seconds)
我们打开hbase shell查看一下:可以看到有很多的系统表以及刚创建的test表
hbase(main):004:0> list_namespace_tables 'default' TABLE SYSTEM.CATALOG SYSTEM.CHILD_LINK SYSTEM.FUNCTION SYSTEM.LOG SYSTEM.MUTEX SYSTEM.SEQUENCE SYSTEM.STATS SYSTEM.TASK test
查看test表信息
hbase(main):005:0> desc 'test' Table test is ENABLED test, {TABLE_ATTRIBUTES => {coprocessor$1 => '|org.apache.phoenix.coprocessor.ScanRegionObserver|805306366|', coproce ssor$2 => '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|805306366|', coprocessor$3 => '|org.apach e.phoenix.coprocessor.GroupedAggregateRegionObserver|805306366|', coprocessor$4 => '|org.apache.phoenix.coprocessor.S erverCachingEndpointImpl|805306366|', coprocessor$5 => '|org.apache.phoenix.hbase.index.IndexRegionObserver|805306366 |org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec,index.builder=org.apache.phoeni x.index.PhoenixIndexBuilder'} COLUMN FAMILIES DESCRIPTION {NAME => 'cf1', BLOOMFILTER => 'NONE', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLO CK_ENCODING => 'FAST_DIFF', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCK SIZE => '65536', REPLICATION_SCOPE => '0'} {NAME => 'cf2', BLOOMFILTER => 'NONE', VERSIONS => '1', IN_MEMORY => 'false', KEEP_DELETED_CELLS => 'FALSE', DATA_BLO CK_ENCODING => 'FAST_DIFF', TTL => 'FOREVER', COMPRESSION => 'NONE', MIN_VERSIONS => '0', BLOCKCACHE => 'true', BLOCK SIZE => '65536', REPLICATION_SCOPE => '0'} 2 row(s) in 0.1690 seconds
3.2 添加(更新)数据 注意: 太坑了!这里VALUES里面的字符串,需要用 单引号 !不能用 双引号 !
UPSERT INTO "test"("Row","cf1"."name","cf1"."sex","cf2"."age","cf2"."address") VALUES(1,'tom','male','18','USA');
查看数据:
0: jdbc:phoenix:s202> select * from "test"; +------+-------+-------+------+----------+ | Row | name | sex | age | address | +------+-------+-------+------+----------+ | 1 | tom | male | 18 | USA | +------+-------+-------+------+----------+ 1 row selected (0.035 seconds) 0: jdbc:phoenix:s202>
利用hbase shell查看:
hbase(main):006:0> scan 'test' ROW COLUMN+CELL \x80\x00\x00\x01 column=cf1:\x00\x00\x00\x00, timestamp=1586705443984, value=x \x80\x00\x00\x01 column=cf1:\x80\x0B, timestamp=1586705443984, value=tom \x80\x00\x00\x01 column=cf1:\x80\x0C, timestamp=1586705443984, value=male \x80\x00\x00\x01 column=cf2:\x80\x0D, timestamp=1586705443984, value=18 \x80\x00\x00\x01 column=cf2:\x80\x0E, timestamp=1586705443984, value=USA 1 row(s) in 0.2330 seconds
3.3 删除数据 0: jdbc:phoenix:s202> DELETE FROM "test" WHERE "Row" = 1;
查看结果:
0: jdbc:phoenix:s202> select * from "test"; +------+-------+------+------+----------+ | Row | name | sex | age | address | +------+-------+------+------+----------+ +------+-------+------+------+----------+ No rows selected (0.023 seconds)
四、安装SQuirrel客户端 SQuirreL 客户端是基于java安装,是一个可视化工具。
步骤
下载 squirrel-sql-4.0.0-standard.jar
打开cmd,运行jar
D:\开发安装包\大数据系列软件>java -jar squirrel-sql-4.0.0-standard.jar
安装引导
根据需要安装数据库插件(当然我全装了,免得以后麻烦)
开始菜单中,找到客户端程序
配置SQuirrel
添加phoenix服务器安装目录下的phoenix-[version]-client.jar(即phoenix-4.15.0-HBase-1.4-client.jar)到squirrel-sql安装目录lib/下(重启一下客户端)
添加驱动
URL :jdbc:phoenix:yourHost
Driverclass : org.apache.phoenix.jdbc.PhoenixDriver
![avatar](/postImages/squirrel5.png)
![avatar](/postImages/squirrel6.png)
添加别名
然后点击确定,查看我们创建的表
开始编写SQL语句