Phoenix介绍:
针对hbase开发的第三方插件,目前已贡献给Apache,顶级项目
Phoenix是构建在HBase上的一个SQL层
可以使用类似于操作mysql的标准sql语句,作为hbase客户端JDBC的驱动对hbase中的数据进行低延迟的访问
内部实现为将sql查询语句编译成hbase内部的一系列scan操做
因为hive关联hbase查询底层为MapReduce,为Phoenix底层查询为hbase的API,故查询速度比hive集成快
hbase-》hive-》hql-》MapReduce查询等-》速度慢
hbase-》Phoenix-》sql-》hbase Scan查询(JDBC结果集)-》速度快
官网下载 http://phoenix.apache.org/download.html
1、上传解压
$ tar zxf apache-phoenix-4.14.0-cdh5.14.2-bin.tar.gz
$ mv apache-phoenix-4.14.0-cdh5.14.2-bin phoenix-4.14.0-cdh5.14.2 (可不修改)
2、将phoenix安装目录下的phoenix-4.14.0-cdh5.14.2-server.jar拷贝到hbase的lib目录下
$ cp phoenix-4.14.0-cdh5.14.2/phoenix-4.14.0-cdh5.14.2-server.jar hbase-1.2.0-cdh5.14.2/lib/
3、将phoenix安装目录下的phoenix-core-4.14.0-cdh5.14.2.jar 拷贝到hbase的lib目录下(如果是phoenix 3.x版本的安装除了phoenix-[version]-server.jar需要复制外,同时phoenix-core-[version].jar 也需要复制,但是我们安装的是phoenix 4.x所以phoenix-core-[version].jar 的jar包就不需要复制了)
$ cp phoenix-4.14.0-cdh5.14.2/phoenix-core-4.14.0-cdh5.14.2.jar hbase-1.2.0-cdh5.14.2/lib/
4、将hbase/conf目录下hbase-site文件覆盖放入phoenix的bin目录下
$ cp hbase-1.2.0-cdh5.14.2/conf/hbase-site.xml phoenix-4.14.0-cdh5.14.2/bin/
5、重启hbase进程
6、启动phoenix客户端交互命令
$ bin/sqlline.py zkip:2181
第一次启动时间相对较长要进行初始化操作创建一些表
如果报argparse错误:$ sudo yum -y install python-argparse
集成测试:
-》show databases 或 show tables 不支持的,并不与mysql中操作完全一样
-》!help 查看内置命令
-》!tables 查看hbase中与phoenix建立好映射的表
-》通过phoenix客户端创建表
create table user_ph(
id varchar primary key,
name varchar,
password varchar
);
phoenix查看表有没有:
-》hbase shell中通过list查看
注意:phoenix中的表名和字段名不加双引号则默认都为大写
加上双引号则区分大小写
phoenix和RDBMS中一样,有数据类型
-》hbase shell中通过 desc 'USER_PH'
表列簇默认名称是0,NAME => '0'
-》重新创建,并指定列簇:列
drop table user_ph;
create table "user_ph"(
"id" varchar primary key,
"info"."name" varchar,
"info"."password" varchar
);
-》添加数据:
updata+insert结合命令--》upsert,插入数据时表名和列名因为都是小写的所以要加双引号, 值为字符串时只能用单引号引起否则报错,phoenix中创建表时的主键列会默认为hbase表中的rowkey
upsert into "user_ph"("id","info"."name","info"."password") values('001','admin','admin');
upsert into "user_ph"("id","info"."name","info"."password") values('002','admin','admin');
upsert into "user_ph"("id","info"."name","info"."password") values('003','admin','admin');
-》查询数据:
select * from "user_ph";
scan "user_ph"
-》删除数据:
delete from "user_ph" where "id"='002';
-》在phoenix中的client界面中进行的crud(增删改查)操作与RDBMS的操作大都相同
-》退出phonix客户端命令行
!quit