Phoenix
作者:互联网
Phoenix安装部署
2.1.1官方网址: http://phoenix.apache.org/index.html
2.1.2 上传jar包到/opt/software/
解压到/opt/module 改名为phoenix
[yulong@hadoop102 module]$ tar -zxvf /opt/software/apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz -C /opt/module
[yulong@hadoop102 module]$ mv apache-phoenix-4.14.1-HBase-1.3-bin phoenix |
2.1.3 复制server和client这俩个包拷贝到各个节点的hbase/lib
在phoenix目录下
[yulong@hadoop102 module]$ cd /opt/module/phoenix/ |
拷贝client jar server jar到hbase-1.3.1/lib
[yulong@hadoop102 phoenix]$ cp phoenix-4.14.1-HBase-1.3-server.jar /opt/module/hbase-1.3.1/lib/ [yulong@hadoop102 phoenix]$ cp phoenix-4.14.1-HBase-1.3-client.jar /opt/module/hbase-1.3.1/lib/
|
向其他节点发送jar包
[yulong@hadoop102 hbase-1.3.1]$ xsync lib/ |
2.1.4在root权限下给/etc/profile 下添加如下内容
[yulong@hadoop102 module]$ sudo vim /etc/profile
#phoenix export PHOENIX_HOME=/opt/module/phoenix export PHOENIX_CLASSPATH=$PHOENIX_HOME export PATH=$PATH:$PHOENIX_HOME/bin
|
编辑完后执行source /etc/profile
2.1.5 安装Python环境
1. 远程下载:
yum install python2
2. 安装好了之后创建软链接:
sudo ln -s /usr/bin/python2.7 /usr/bin/python
2.1.5启动Zookeeper,Hadoop,Hbase
2.1.6启动Phoenix
[yulong@hadoop102 phoenix]$ bin/sqlline.py hadoop102,hadoop102,hadoop103:2181 |
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 BIGINT CONSTRAINT my_pk PRIMARY KEY (state, city)); |
如下显示:
在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命令行中查看所有表:
图2 hbase命令行中查看所有表:
如果要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射
2.3.2 Hbase命令行中创建表test
Hbase 中test的表结构如下,两个列簇name、company.
Rowkey |
name |
company |
||
empid |
firstname |
lastname |
name |
address |
启动Hbase shell
[yulong@hadoop102 ~]$ /opt/module/hbase-1.3.1/bin/hbase shell |
创建Hbase表test
hbase(main):001:0> create 'test','name','company' |
创建表,如下图:
2.3.3 视图映射
Phoenix创建的视图是只读的,所以只能用来做查询,无法通过视图对源数据进行修改等操作。
在phoenix中创建视图test表
0: jdbc:phoenix:hadoop102,hadoop102,hadoop103> create view "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar); |
删除视图
0: jdbc:phoenix:hadoop102,hadoop102,hadoop103> drop view "test"; |
2.3.3 表映射
使用Apache Phoenix创建对HBase的表映射,有两种方法:
1) 当HBase中不存在表时,可以以类似创建视图的方式创建关联表,只需要将create view改为create table即可。
0: jdbc:phoenix:hadoop102,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:hadoop102,hadoop102,hadoop103> create table "test"(empid varchar primary key,"name"."firstname" varchar,"name"."lastname" varchar,"company"."name" varchar,"company"."address" varchar) column_encoded_bytes=0; |
2.3.4 视图映射和表映射的对比与总结:
相比于直接创建映射表,视图的查询效率会低,原因是:创建映射表的时候,Phoenix会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。
使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。
第1章 Phoenix创建Hbase二级索引
3.1 配置Hbase支持Phoenix创建二级索引
3.1.1 添加如下配置到Hbase的Hregionserver节点的hbase-site.xml
<!-- phoenix regionserver 配置参数 --> <property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property>
<property> <name>hbase.region.server.rpc.scheduler.factory.class</name> <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property>
<property> <name>hbase.rpc.controllerfactory.class</name> <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value> <description>Factory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates</description> </property>
|
3.1.2 添加如下配置到Hbase中Hmaster节点的hbase-site.xml中
<!-- phoenix master 配置参数 --> <property> <name>hbase.master.loadbalancer.class</name> <value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value> </property>
<property> <name>hbase.coprocessor.master.classes</name> <value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value> </property> |
3.1.3 验证效果:
3.2 创建索引
3.2.1 phoenix的索引分类
1)global index是默认的索引格式。适用于多读少写的业务场景。写数据的时候会消耗大量开销,因为索引表也要更新,而索引表是分布在不同的数据节点上的,跨节点的数据传输带来了较大的性能消耗。在读数据的时候Phoenix会选择索引表来降低查询消耗的时间。如果想查询的字段不是索引字段的话索引表不会被使用,也就是说不会带来查询速度的提升。
CREATE INDEX my_index ON my_table (my_col) |
2)Local index适用于写操作频繁的场景。索引数据和数据表的数据是存放在相同的服务器中的,避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。查询的字段不是索引字段索引表也会被使用,这会带来查询速度的提升。
CREATE LOCAL INDEX my_index ON my_table (my_index) |
建立local index可能出现的问题
hbase-site.xml的zookeeeper的配置信息不能加2181,否则在创建local index的时候会报以下异常:
正常配置:
<property> <name>hbase.zookeeper.quorum</name> <value>hadoop102,hadoop102,hadoop103</value> </property> |
Local index 和 Global index区别: Local index 由于是数据与索引在同一服务器上,所以要查询的数据在哪台服务器的哪个region是无法定位的,只能先找到region然后在利用索引。 Global index 是一种分布式索引,可以直接利用索引定位服务器和region,速度更快,但是由于分布式的原因,数据一旦出现新增变化,分布式的索引要进行跨服务的同步操作,带来大量的通信消耗。所以在写操作频繁的字段上不适合建立Global index。
|
3.2.2 三种提升效率查询方式
1) CREATE INDEX my_index ON my_table (v1) INCLUDE (v2) |
2) SELECT /*+ INDEX(my_table my_index) */ v2 FROM my_table WHERE v1 = 'foo' |
3) CREATE LOCAL INDEX my_index ON my_table (v1) |
3.2.3 如何删除索引
DROP INDEX my_index ON my_table |
标签:index,Phoenix,phoenix,索引,hbase,hadoop102,my 来源: https://www.cnblogs.com/chang09/p/16205668.html