【转载】Phoenix

 

第1章 Phoenix简介

1.1 Phoenix定义

Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。

1.2 Phoenix特点

  1. 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。

  2. 性能好:直接使用HBase API以及协处理器和自定义过滤器,可以为小型查询提供毫秒级的性能,或者为数千万行提供数秒的性能。

  3. 操作简单:DML命令以及通过DDL命令创建表和版本化增量更改。

  4. 安全功能: 支持GRANT和REVOKE

  5. 完美支持Hbase二级索引创建。

第2章 Phoenix快速入门

2.1 Phoenix安装部署

2.1.1官方网址: phoenix.apache.org/index.html

2.1.2 上传jar包到/opt/software/

解压到/opt/module 改名为phoenix

[root@hadoop101 module]tar -zxvf /opt/software/apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz -C /opt/module [root@hadoop101 module]tarzxv**f/opt/softwar**e/apach**ephoenix−4.14.1−HBase−1.3−bin.tar.g**zC/opt/modul**e[roo**t@hadoo**p101modul**e] mv apache-phoenix-4.14.1-HBase-1.3-bin phoenix

2.1.3 复制server和client这俩个包拷贝到各个节点的hbase/lib

在phoenix目录下

[root@hadoop101 module]$ cd /opt/module/phoenix/

向每个节点发送server jar

[root@hadoop101 phoenix]cp phoenix-4.14.1-HBase-1.3-server.jar /opt/module/hbase-1.3.1/lib/ [root@hadoop101 phoenix]cpphoenix−4.14.1−HBase−1.3−serve**r.jar/opt/modul**e/hbase−1.3.1/lib/[roo**t@hadoo**p101phoenix] scp phoenix-4.14.1-HBase-1.3-server.jar hadoop102:/opt/module/hbase-1.3.1/lib/ [root@hadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-server.jar hadoop103:/opt/module/hbase-1.3.1/lib/

向每个节点发送client jar

[root@hadoop101 phoenix]cp phoenix-4.14.1-HBase-1.3-client.jar /opt/module/hbase-1.3.1/lib/ [root@hadoop101 phoenix]cpphoenix−4.14.1−HBase−1.3−clien**t.jar/opt/modul**e/hbase−1.3.1/lib/[roo**t@hadoo**p101phoenix] scp phoenix-4.14.1-HBase-1.3-client.jar hadoop102:/opt/module/hbase-1.3.1/lib/ [root@hadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-client.jar hadoop103:/opt/module/hbase-1.3.1/lib/

2.1.4在root权限下给/etc/profile 下添加如下内容

#phoenix export PHOENIX_HOME=/opt/module/phoenix export PHOENIX_CLASSPATH=PHOENIX_HOME export PATH=PHOENIXHOMEexportPATH=PATH:$PHOENIX_HOME/bin

2.1.5启动Zookeeper,Hadoop,Hbase

2.1.6启动Phoenix

[root@hadoop101 phoenix]$ /opt/module/phoenix/bin/sqlline.py hadoop101,hadoop102,hadoop103:2181

【转载】Phoenix

2.2 phoenix表操作

2.2.1 显示所有表

!table 或 !tables

2.2.2 创建表

CREATE TABLE IF NOT EXISTS us_population (State CHAR(2) NOT NULL,City VARCHAR NOT NULL,Population BIGINTCONSTRAINT my_pk PRIMARY KEY (state, city));

如下显示:

【转载】Phoenix

在phoenix中,默认情况下,表名等会自动转换为大写,若要小写,使用双引号,如"us_population"。

2.2.3 插入记录

upsert into us_population values('NY','NewYork',8143197);

2.2.4 查询记录

select * from us_population ; select * from us_population wherestate='NY';

2.2.5 删除记录

delete from us_population wherestate='NY';

2.2.6 删除表

drop table us_population;

2.2.7 退出命令行

!quit

2.3 phoenix表映射

2.3.1 Phoenix和Hbase表的关系

默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的。如图1和图2,US_POPULATION是在phoenix中直接创建的,而kylin相关表是在hbase中直接创建的,在phoenix中是查看不到kylin等表的。

图1 phoenix命令行中查看所有表:

【转载】Phoenix

图2 hbase命令行中查看所有表:

【转载】Phoenix

如果要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射****

2.3.2 Hbase命令行中创建表test

Hbase 中test的表结构如下,两个列簇name、company.

Rowkey name company    
empid firstname lastname name address
         

 

 

 

 

启动Hbase shell

[root@hadoop101 ~]$ /opt/module/hbase-1.3.1/bin/hbase shell

 

创建Hbase表test

hbase(main):001:0> create 'test','name','company'

 

创建表,如下图:

【转载】Phoenix

2.3.3 视图映射

Phoenix创建的视图是只读的,所以只能用来做查询,无法通过视图对源数据进行修改等操作。

在phoenix中创建视图test表

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

 

删除视图

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> drop view "test";

2.3.3 表映射

使用Apache Phoenix创建对HBase的表映射,有两种方法:

1) 当HBase中已经存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create table "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

 

2) 当HBase中不存在表时,可以直接使用create table指令创建需要的表,系统将会自动在Phoenix和HBase中创建person_infomation的表,并会根据指令内的参数对表结构进行初始化。

0: jdbc:phoenix:hadoop101,hadoop102,hadoop103> create table "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar);

 

2.3.4 使用spark对phoenix的读写

【转载】Phoenix

在Phoenix中查看数据

select * from STOCK_SYMBOL

如下显示:

【转载】Phoenix

在Hbase中查看数据

scan "STOCK_SYMBOL"

【转载】Phoenix

更多使用详情,请参考phoenix.apache.org/phoenix_spa…

2.3.5 视图映射和表映射的对比与总结:

相比于直接创建映射表,视图的查询效率会低,原因是:创建映射表的时候,Phoenix会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。

使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。

上一篇:python中的hasattr,getattr,setattr使用总结


下一篇:大数据之Hadoop-安装JDK和Hadoop--2