Phoenix实战

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Phoenix实战相关的知识,希望对你有一定的参考价值。

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

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

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

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

4) 安全功能: 支持GRANT和REVOKE 。

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

解压到/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]$ mv apache-phoenix-4.14.1-HBase-1.3-bin phoenix 

在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]$ 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]$ 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/ 

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

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

  !table  或 !tables 

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

如下显示:

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

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

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

  delete from us_population wherestate='NY'; 

  drop table us_population; 

  !quit 

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

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

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

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

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

Rowkeynamecompany

empidfirstnamelastnamenameaddress

启动Hbase shell

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

创建Hbase表test

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

创建表,如下图:

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"; 

使用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); 

在Phoenix中查看数据

  select * from STOCK_SYMBOL 

如下显示:

在Hbase中查看数据

  scan "STOCK_SYMBOL" 

更多使用详情,请参考 http://phoenix.apache.org/phoenix_spark.html

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

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

Spark 实战系列Phoenix 整合 spark 进行查询分析

Phoenix 整合 spark 进行查询分析

前言

Phoenix 是一个开源的 HBASE SQL 层。它不仅可以使用标准的 JDBC API 替代 HBASE client API 创建表,插入和查询 HBASE,也支持二级索引、事物以及多种 SQL 层优化。

为什么要使用 Phoenix ?

因为使用 hbase 的 api 查询,代码开发起来比较麻烦,而 Phoenix 使支持 SQL 查询的

Phoenix 可以构建盐表,能够解决热点问题,从而避免一个 rs 频繁被请求,其他的 rs 很闲的

Phoenix 支持二级索引,因为可以构建盐表,索引也是分区的.

为什么要和 spark 整合呢 ?

Phoenix 是 hbase 的 SQL 层,主要为了解决高并发、低延迟、简单查询场景,当然也可以解决一定的分析需求。 必须命中索引 且 命中后 返回的数据较少, 此时 Phoenix 是比较适合的,但是如果有复杂的业务查询和大量的聚合操作,就会对hbase 的稳定性造成一定的影响,这个时候 Phoenix 是不适合的.

spark 提供的分析引擎满足 低并发,高延迟,复杂计算 场景。 不管怎么复杂的 SQL,都可以完成。 另外 Spark 可以支持sql、scala、java、python 多种语言,支持流、OLAP、离线分析、数据清洗、支持多数据源,复杂的业务场景下,非常适合.

所以将 phoenix 做存储,spark 做计算层。这样就结合了 phoenix 查询速度快和 spark 计算速度快的优点。是一个非常好的选择,这样也使两者支持更多的场景

下面介绍一个 spark 读取 Phoenix 中的数据,然后进行业务逻

以上是关于Phoenix实战的主要内容,如果未能解决你的问题,请参考以下文章

Spark 实战系列Phoenix 整合 spark 进行查询分析

Hbase表映射到phoenix

HBase集成Phoenix,构建Phoenix view和table的区别

Phoenix 实践——Phoenix 表的视图构建(表映射)总结小记

Phoenix入门

Phoenix入门