01.07 hbase与phoenix集成

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

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

Phoenix可以看成是mysql

准备安装包

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

hbase与phoenix集成

解压Phoenix

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

hbase与phoenix集成

改下名字

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

hbase与phoenix集成

看下目录结构

hbase与phoenix集成

将jar拷贝到hbase的lib目录下

phoenix-4.12.0-HBase-1.2-client.jar

phoenix-core-4.12.0-HBase-1.2.jar

hbase与phoenix集成

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/

hbase与phoenix集成

重启hbase服务,让配置生效

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

hbase与phoenix集成


<code> <property>/<code>
<code> <name>hbase.tmp.dir/<name>/<code>
<code> <value>/opt/bigdata/hbase-1.2.1/data/<value>/<code>
<code> /<code>
<code> <property>/<code> 
<code> <name>hbase.rootdir/<name>/<code>
<code> <value>hdfs://masterhbase:8082/hbase/<value>/<code>
<code> /<code>
<code> <property>/<code>
<code> <name>hbase.cluster.distributed/<name>/<code>
<code> <value>true/<value>/<code>
<code> /<code>
<code> <property>/<code>
<code> <name>hbase.zookeeper.quorum/<name>/<code>
<code> <value>masterhbase,masterslave1,masterslave2/<value>/<code>
<code> /<code>
<code> <property>/<code>
<code> <name>zookeeper.znode.parent/<name>/<code>
<code> <value>/hbase/<value>/<code>
<code> /<code>
<code> <property>/<code>
<code> <name>hbase.regionserver.wal.codec/<name>/<code>
<code> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec/<value>/<code>
<code> /<code>


hbase与phoenix集成

安装工具

yum -y install python-argparse

hbase与phoenix集成

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

bin/sqlline.py masterhbase:2181

hbase与phoenix集成

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

hbase与phoenix集成

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

hbase与phoenix集成

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

hbase与phoenix集成

创建表

CREATE TABLE user (

id varchar PRIMARY KEY,

name varchar ,

passwd varchar

);

hbase与phoenix集成

在HBase Shell中可以看到

hbase与phoenix集成

hbase区分大小写

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

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

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

hbase与phoenix集成

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

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

hbase与phoenix集成

在HBase Shell中查看

scan 'USER'

hbase与phoenix集成

phoenix删除表

drop table user;

hbase与phoenix集成

phoenix指定列族

CREATE TABLE user (

id varchar PRIMARY KEY,

INFO.name varchar ,

INFO.passwd varchar

);

hbase与phoenix集成

在hbase shell中查看

hbase与phoenix集成

phoenix查询语句:

select * from user;

hbase与phoenix集成

select name from user where id ='001';

hbase与phoenix集成

phoenix删除语句:

delete from user where id='001';

hbase与phoenix集成

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

hbase与phoenix表与表进行关联

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

在HBase中有一张表

hbase与phoenix集成

我们在phoenix做映射创建

create table "stu_info_importtsv"(

"ROW" varchar primary key,

"f1"."location" varchar,

"f2"."age" varchar,

"f1"."name" varchar,

"f3"."addr" varchar

);

hbase与phoenix集成

查看下数据

hbase与phoenix集成

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

hbase与phoenix集成

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)

);

hbase与phoenix集成

准备数据

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

hbase与phoenix集成

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

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

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

hbase与phoenix集成

查询数据

hbase与phoenix集成

如果使用sql文件

hbase与phoenix集成

执行语句

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

hbase与phoenix集成

查看表也是有的

hbase与phoenix集成

我们看下HBase中

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

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

hbase与phoenix集成

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

添加数据

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

hbase与phoenix集成

查看下

hbase与phoenix集成

hbase与phoenix集成

再添加

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

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

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

hbase与phoenix集成

查看下

hbase与phoenix集成

但是在phoenix中没有

hbase与phoenix集成

总结:

首先,这张表是在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键就可以执行了



分享到:


相關文章: