Phoenix与MySQL的区别_hbase与phoenix集成

本文介绍了Phoenix作为HBase的关系型数据库层,提供低延迟的数据访问。Phoenix通过将SQL查询转换为HBase的scan操作,实现类似MySQL的功能。文章详细讲述了Phoenix的安装、配置、与HBase的集成,以及如何在Phoenix中进行CRUD操作,并对比了与MySQL的差异。同时,文章还提到了Phoenix支持的数据类型和CSV文件导入,以及使用Squirrel SQL客户端进行交互的步骤。
摘要由CSDN通过智能技术生成

Phoenix是构建在HBase之上的关系型数据库层,作为内嵌的客户端JDBC驱动用以对HBase中的数据进行低延迟访问

Phoenix会将用户编写的sql查询编译为一系列的scan操作,最终产生通用的JDBC结果集返回给客户端

Phoenix可以看成是mysql

准备安装包

apache-phoenix-4.12.0-HBase-1.2-bin.tar.gz

3d37214f247899c9d2d95676912f6865.png

解压Phoenix

tar -zxvf apache-phoenix-4.12.0-HBase-1.2-bin.tar.gz

de1af9f6ed10b440c9d127da26274ac7.png

改下名字

mv apache-phoenix-4.12.0-HBase-1.2-bin phoenix-4.12.0

e5911b98313708c10dec8b46630e284d.png

看下目录结构

12d71afa3bb49b9733f4926940af1677.png

将jar拷贝到hbase的lib目录下

phoenix-4.12.0-HBase-1.2-client.jar

phoenix-core-4.12.0-HBase-1.2.jar

216a3d1b1a37b8eef6e2dc8d11f9b77a.png

cp phoenix-4.12.0-HBase-1.2-client.jar /opt/bigdata/hbase-1.2.1/lib/

cp phoenix-core-4.12.0-HBase-1.2.jar /opt/bigdata/hbase-1.2.1/lib/

801740990d2f4fbae2707f49aced81c4.png

重启hbase服务,让配置生效

找到hbase-site.xml文件,将hbase/conf下的hbase-site.xml文件拷贝到Phoenix/bin目录下覆盖掉,或者直接修改

2cfbac934ac15b36fc79a7670828923e.png

hbase.tmp.dir

/opt/bigdata/hbase-1.2.1/data

hbase.rootdir

hdfs://masterhbase:8082/hbase

hbase.cluster.distributed

true

hbase.zookeeper.quorum

masterhbase,masterslave1,masterslave2

zookeeper.znode.parent

/hbase

hbase.regionserver.wal.codec

org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec

44ddcf8be147a811e340d979771a3b16.png

安装工具

yum -y install python-argparse

82e0cfa330efa3567461e4905068de92.png

启动Phoenix:指定ZK的地址以及端口号,作为hbase的访问入口

bin/sqlline.py masterhbase:2181

9574c9238864baa7781629375f8f311a.png

在HBase中输入list,会发现多一些表

ecfb2c90a222716cad8627422f799e02.png

语句大多数类似mysql语句,但是没有show database table list都不行 用help帮助信息

55f4ea11edb3eb990539715356d16bc7.png

!tables 当前phoenix的系统表,hbase中也会有这些表,表示关联成功一半

e0737b608a2b37afc1f0091576913c27.png

创建表

CREATE TABLE user (

id varchar PRIMARY KEY,

name varchar ,

passwd varchar

);

ba9c6b4bcc2eec9ae9771036320a6baa.png

在HBase Shell中可以看到

f0bf1d025ff7cd780384947ae0704940.png

hbase区分大小写

Phoenix不区分大小写,默认情况下都是大写,变小写加上双引号就可以

在hbase的shell中:describe 'USER' 查看

得知默认列族为0,id主键字段对应到hbase的ROW字段

6a1d5b95c6d0fec5004c8d9ca6b34549.png

phoenix插入数据: updata+insert结合(upsert)更新数据与这个语句是一样的

upsert into user(id, name, passwd) values('001', 'admin', 'admin');

84470daaa261aa937e4caeb862a478ed.png

在HBase Shell中查看

scan 'USER'

3c3f12278f1235c52b9897b7c08750f0.png

phoenix删除表

drop table user;

5b010e111f6db2c64ac28a772cd9c93e.png

phoenix指定列族

CREATE TABLE user (

id varchar PRIMARY KEY,

INFO.name varchar ,

INFO.passwd varchar

);

6d0ff0ad6637e127330533ee6c486661.png

在hbase shell中查看

75453e4f86c2505f2c265cdec677c47b.png

phoenix查询语句:

select * from user;

7962d79d6226260dea82411315c668d2.png

select name from user where id ='001';

8837ef84ee1f3bed2072cf7bc40eb92f.png

phoenix删除语句:

delete from user where id='001';

a3f5cde9dc4bfa221da13223629a0eca.png

在phoenix的CLI界面中进行简单的CRUD操作,基本上与RDBMS的操作没有太大区别。

hbase与phoenix表与表进行关联

在phoenix中:列的顺序可以不一致,表名称必须一致,以及列名称一致

在HBase中有一张表

1bf14dc442848e8caab883498682a07b.png

我们在phoenix做映射创建

create table "stu_info_importtsv"(

"ROW" varchar primary key,

"f1"."location" varchar,

"f2"."age" varchar,

"f1"."name" varchar,

"f3"."addr" varchar

);

2176a94666368c0f9b106f29159ef700.png

查看下数据

1c87c3f2a1e52fb3ad639740d9885546.png

回到hbase中会发现一些变化,不会影响,可忽略

d124bbc8a8a96ba53bcb7f0797e28b39.png

phoenix数据类型:

char

varchar

decimal

tinyint

smallint

integer

bigint

float

double

timestamp

date

time

binary

varbinary

phoenix导入csv文件数据(批量):

注意:要加载的所有CSV文件都必须具有".csv"文件扩展名

另外phoenix也支持mr做一个批量数据导入

Phoenix创建表

create table if not exists bulkdata (

state char(2) not null,

city varchar not null,

population bigint

constraint my_pk primary key (state, city)

);

cf992ab1e047eb9eb0e5ecbcc9cf525a.png

准备数据

NY,New York,8143197

CA,Los Angeles,3844829

IL,Chicago,2842518

TX,Houston,2016582

PA,Philadelphia,1463281

AZ,Phoenix,1461575

TX,San Antonio,1256509

CA,San Diego,1255540

TX,Dallas,1213825

CA,San Jose,912332

5a0ee76b78bd75575e30a5199d136010.png

如果没有指定表的名称,他根据文件名称来找对应的表

(bin/psql.py masterhbase /data/phoeniximport.csv 没有指定表名称)

bin/psql.py -t BULKDATA masterhbase /data/phoeniximport.csv

4f163b7ee84ec8316ce0bc73fe081345.png

查询数据

89bfe93a04364c36fcdff8db2a4f34ad.png

如果使用sql文件

0b1b968c1a5334cfe292d6aa264fe1d9.png

执行语句

/opt/bigdata/phoenix-4.12.0/bin/psql.py /data/testphoenix.sql

191fbc625be84b939c93f4f7b30c743a.png

查看表也是有的

4faf2d60901379105b6a64665ffee6ff.png

我们看下HBase中

主键就是hbase对应的rowkey,为了防止hbase主键的唯一性,可以设置多个字段为主键

这个表就是多个字段的主键

98b3f6fa3d4a3781d3457d0cc0c0744f.png

在hbase中添加数据和phoenix添加数据的不同:

添加数据

upsert into bulkdata(state, city, population) values('NY', 'admin', 212313);

4cbbfeafd279a2f04e6903f71af0ce15.png

查看下

dea7cb5157b012894a775c5ebd9d6372.png

a42928128c45a2ccf428d519be26b7ae.png

再添加

put 'BULKDATA','41','0:population','2222'

put 'BULKDATA','41','0:city','SHANGHAI'

put 'BULKDATA','41','0:state','tom'

28cda11c8cb755f8a6850aad803f1524.png

查看下

b8192524b78faf78fe0850b4a2b52d86.png

但是在phoenix中没有

2a94734ad8c2acc46cf01562a86b8769.png

总结:

首先,这张表是在phoenix中创建

在phoenix中更新数据,hbase也会更新

在hbase中更新数据,phoenix是不会更新的

一些小补充:

1、phoenix JAVA API也可以

phoenix-4.12.0-HBase-1.2-client.jar

phoenix-core-4.12.0-HBase-1.2.jar

添加到项目的classpath中,代码风格类似JDBC,这个网上很多,不做过多练习。

2、一个第三方工具

使用Squirrel GUI客户端来连接phoenix

就像MySQL使用Navicat for MySQL,小海豚一样的连接工具,在进行一些数据库操作的时候能够更加的直观和方便

将下载的jar文件双击进行安装,直接下一步即可

将phoenix-4.12.0-HBase-1.2-client.jar拷贝到squirrel安装目录的lib目录下。

启动:进入Drivers标签页创建新的Driver (加号)

参数说明:

Name:hbasetest(可以填写其他名称)

ExampleURL:填写HBase集群的zookeeper集群的连接信息,这里是jdbc:phoenix:hbasemaster:2181

Website URL:这里不填写

Java Class Path:选择phoenix-4.2.2-client.jar(是否选中无所谓,只要在Java Class Path里面就行)

进入Aliases标签页创建新的Alias(加号)

参数说明:

Name:hbasemaster(可以填写其他名称)

Driver:选择ibeifeng.class,即上一步创建的Driver

URL:这里就是HBase集群的zookeeper的连接ip和port

User Name:随便填写

Password:随便填写

在Aliases标签中双击刚刚创建的phoenix打开连接

点击SQL标签进入sql命令行界面,输入语句执行(小人走路的是执行按钮)

练习语句

create table if not exists mytable (

id integer primary key,

name varchar,

sex varchar,

address varchar

);

upsert into mytable values (1, 'wxb', 'male', '010-22222222');

upsert into mytable values (2, 'll', 'male', '010-11111111');

select * from mytable;

select * from "stu_info"

依然注意大小写

在SQuirrel中,执行sql语句时,按Ctrl + Enter键就可以执行了

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值