展示中心网站建设,湟中网站建设,服务公司发展战略,文登区建设局网站1、Phoenix简介
1.1 Phoenix定义
Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表#xff0c;插入数据和查询HBase数据。
1.2 Phoenix特点
容易集成#xff1a;如Spark#xff0c;Hive#xff0c;Pig#xff0c;Flume和Map Reduce。性能…1、Phoenix简介
1.1 Phoenix定义
Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表插入数据和查询HBase数据。
1.2 Phoenix特点
容易集成如SparkHivePigFlume和Map Reduce。性能好直接使用HBase API以及协处理器和自定义过滤器可以为小型查询提供毫秒级的性能或者为数千万行提供数秒的性能。操作简单DML命令以及通过DDL命令创建表和版本化增量更改。安全功能: 支持GRANT和REVOKE 。完美支持Hbase二级索引创建。
1.3 Phoenix架构 1.4 Phoenix的作用 2、Phoenix快速入门
2.1 Phoenix安装部署
2.1.1官方网址 http://phoenix.apache.org/index.html
2.1.2 上传jar包到/opt/software/
解压到/opt/module 改名为phoenix
[ybbhadoop101 module]$ tar -zxvf /opt/software/apache-phoenix-4.14.1-HBase-1.3-bin.tar.gz -C /opt/module [ybbhadoop101 module]$ mv apache-phoenix-4.14.1-HBase-1.3-bin phoenix2.1.3 复制server和client这俩个包拷贝到各个节点的hbase/lib
在phoenix目录下
[ybbhadoop101 module]$ cd /opt/module/phoenix/向每个节点发送server jar
[ybbhadoop101 phoenix]$ cp phoenix-4.14.1-HBase-1.3-server.jar /opt/module/hbase-1.3.1/lib/
[ybbhadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-server.jar hadoop102:/opt/module/hbase-1.3.1/lib/
[ybbhadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-server.jar hadoop103:/opt/module/hbase-1.3.1/lib/
向每个节点发送client jar
[ybbhadoop101 phoenix]$ cp phoenix-4.14.1-HBase-1.3-client.jar /opt/module/hbase-1.3.1/lib/
[ybbhadoop101 phoenix]$ scp phoenix-4.14.1-HBase-1.3-client.jar hadoop102:/opt/module/hbase-1.3.1/lib/
[ybbhadoop101 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 下添加如下内容
#phoenixexport PHOENIX_HOME/opt/module/phoenixexport PHOENIX_CLASSPATH$PHOENIX_HOMEexport PATH$PATH:$PHOENIX_HOME/bin2.1.5启动ZookeeperHadoopHbase
2.1.6启动Phoenix
[ybbhadoop101 phoenix]$ /opt/module/phoenix/bin/sqlline.py hadoop101,hadoop102,hadoop103:21812.2 phoenix表操作
2.2.1 显示所有表
table 或 tables2.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和图2US_POPULATION是在phoenix中直接创建的而kylin相关表是在hbase中直接创建的在phoenix中是查看不到kylin等表的。 hbase命令行中查看所有表 如果要在phoenix中操作直接在hbase中创建的表则需要在phoenix中进行表的映射。映射方式有两种视图映射和表映射
2.3.2 Hbase命令行中创建表test
Hbase 中test的表结构如下两个列簇name、company. 启动Hbase shell [ybbhadoop101 ~]$ /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: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中查看数据 select * from STOCK_SYMBOL 如下显示 在Hbase中查看数据 scan “STOCK_SYMBOL” 更多使用详情请参考http://phoenix.apache.org/phoenix_spark.html
2.3.5 视图映射和表映射的对比与总结
相比于直接创建映射表视图的查询效率会低原因是创建映射表的时候Phoenix会在表中创建一些空的键值对这些空键值对的存在可以用来提高查询效率。 使用create table创建的关联表如果对表进行了修改源数据也会改变同时如果关联表被删除源表也会被删除。但是视图就不会如果删除视图源数据不会发生改变。
3、Phoenix创建Hbase二级索引
3.1 配置Hbase支持Phoenix创建二级索引
3.1.1 添加如下配置到Hbase的Hregionserver节点的hbase-site.xml
!-- phoenix regionserver 配置参数 --
property
namehbase.regionserver.wal.codec/name
valueorg.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec/value
/propertyproperty
namehbase.region.server.rpc.scheduler.factory.class/name
valueorg.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory/value
descriptionFactory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates/description
/propertyproperty
namehbase.rpc.controllerfactory.class/name
valueorg.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory/value
descriptionFactory 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
namehbase.master.loadbalancer.class/name
valueorg.apache.phoenix.hbase.index.balancer.IndexLoadBalancer/value
/propertyproperty
namehbase.coprocessor.master.classes/name
valueorg.apache.phoenix.hbase.index.master.IndexMasterObserver/value
/property3.1.3 常见问题汇总
1注意网上配置文档里有这一条但在实际测试中测试环境hbase-1.3.1网上0.98.6加入该条的regionserver会在hbase启动时失败对应节点上没有HregionServer进程去掉该配置后正常启动且能正常创建local index。
property
namehbase.coprocessor.regionserver.classes/name
valueorg.apache.hadoop.hbase.regionserver.LocalIndexMerger/value
/property2hbase-site.xml的zookeeeper的配置信息不能加2181否则在创建local index的时候会报以下异常
正常配置
propertynamehbase.zookeeper.quorum/namevaluehadoop101,hadoop102,hadoop103/value
/property3.2创建索引
3.2.1 phoenix的索引分类
1global index是默认的索引格式。适用于多读少写的业务场景。写数据的时候会消耗大量开销因为索引表也要更新而索引表是分布在不同的数据节点上的跨节点的数据传输带来了较大的性能消耗。在读数据的时候Phoenix会选择索引表来降低查询消耗的时间。如果想查询的字段不是索引字段的话索引表不会被使用也就是说不会带来查询速度的提升。 CREATE INDEX my_index ON my_table (my_index)
2Local index适用于写操作频繁的场景。索引数据和数据表的数据是存放在相同的服务器中的避免了在写操作的时候往不同服务器的索引表中写索引带来的额外开销。查询的字段不是索引字段索引表也会被使用这会带来查询速度的提升。 CREATE LOCAL INDEX my_index ON my_table (my_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
4、 Squirrel可视化连接Phoenix
4.1 下载Squirrel的jar包官方网址
http://squirrel-sql.sourceforge.net/
4.2 在Windows环境下安装Squirrel程序
选择Java方式打开安装 自定义安装目录 3) 一直Next到安装完成 4.3 配置Squirrel连接到Phoenix
1 复制Phoenix的client.jar包到D:\work\squirrel\lib的lib下 2 启动Squirrel
3 配置Driver
4 添加Driver具体配置信息 配置信息 NamePhoenix Example URL jdbcphoenixhadoop101,hadoop102,hadoop103:2181 Java Class Path 选择D:\work\squirrel\lib\phoenix-4.14.1-HBase-1.3-client.jar Class Name org.apache.phoenix.jdbc.PhoenixDriver
5配置Aliases 6添加Aliases具体配置信息 配置信息 Name任意 Driver选择刚才添加的Phoenix URL jdbcphoenixhadoop101,hadoop102,hadoop103:2181 User Name 任意 Password 任意
7测试连接是否成功 双击连接Phoenix 8使用Squirrel查询数据
查询sqlWEB_STAT表要提前建好并导入数据 [ybbhadoop101 bin]$ psql.py …/examples/STOCK_SYMBOL.sql [ybbhadoop101 bin]$ psql.py …/examples/STOCK_SYMBOL.csv select * from WEB_STAT;