1、尚硅谷大数据技术之Phoenix第1章 Phoenix简介1.1Phoenix定义Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。1.2 Phoenix特点1) 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。2) 操作简单:DML命令以及通过DDL命令创建和操作表和版本化增量更改。3) 完美支持Hbase二级索引创建。1.3 Phoenix架构1.4 Phoenix的作用第2章 Phoenix快速入门2.1 Phoenix安装部署2.1.1 官方网址: 2.1.2 上传jar
2、包到/opt/software/ 解压到/opt/module 改名为phoenixatguiguhadoop101 module$ tar -zxvf /opt/software/apache-phoenix-4.14.2-HBase-1.3-bin.tar.gz -C /opt/module atguiguhadoop101 module$ mv apache-phoenix-4.14.2-HBase-1.3-bin phoenix2.1.3 复制server和client这俩个包拷贝到各个节点的hbase/lib在phoenix目录下atguiguhadoop101 module$ cd
3、 /opt/module/phoenix/向每个节点发送server jaratguiguhadoop101 phoenix$ cp phoenix-4.14.2-HBase-1.3-server.jar /opt/module/hbase/lib/atguiguhadoop101 phoenix$ scp phoenix-4.14.2-HBase-1.3-server.jar hadoop102:/opt/module/hbase/lib/atguiguhadoop101 phoenix$ scp phoenix-4.14.2-HBase-1.3-server.jar hadoop103:/
4、opt/module/hbase/lib/向每个节点发送client jaratguiguhadoop101 phoenix$ cp phoenix-4.14.2-HBase-1.3-client.jar /opt/module/hbase/lib/atguiguhadoop101 phoenix$ scp phoenix-4.14.2-HBase-1.3-client.jar hadoop102:/opt/module/hbase/lib/atguiguhadoop101 phoenix$ scp phoenix-4.14.2-HBase-1.3-client.jar hadoop103:/
5、opt/module/hbase/lib/2.1.4 在root权限下给/etc/profile 下添加如下内容#phoenix export PHOENIX_HOME=/opt/module/phoenix export PHOENIX_CLASSPATH=$PHOENIX_HOME export PATH=$PATH:$PHOENIX_HOME/bin2.1.5 启动Zookeeper,Hadoop,Hbase2.1.6 启动Phoenixatguiguhadoop101 phoenix$ /opt/module/phoenix/bin/sqlline.py hadoop101,hadoo
6、p102,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 BIGINTCONSTRAINT my_pk PRIMARY KEY (state, city);如下显示:在phoenix中,默认情况下,表名等会自动转换为大写,若要小写,使用双引号,如us_population。2.2.3 插入记录upsert into us_
7、population values(NY,NewYork,8143197);2.2.4 查询记录select * from us_population ;select * from us_population where state=NY;2.2.5 删除记录delete from us_population where state=NY;2.2.6 删除表drop table us_population;2.2.7 退出命令行!quit2.3 phoenix表映射2.3.1 Phoenix和Hbase表的关系默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的。如图1和图2
8、,US_POPULATION是在phoenix中直接创建的,而kylin相关表是在hbase中直接创建的,在phoenix中是查看不到kylin等表的。图1 phoenix命令行中查看所有表:图2 hbase命令行中查看所有表:如果要在phoenix中操作直接在hbase中创建的表,则需要在phoenix中进行表的映射。映射方式有两种:视图映射和表映射2.3.2 Hbase命令行中创建表testHbase 中test的表结构如下,两个列簇name、company.Rowkeynamecompanyempidfirstnamelastnamenameaddress启动Hbase shellatg
9、uiguhadoop101 $ /opt/module/hbase-1.3.1/bin/hbase shell创建Hbase表testhbase(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 varcha
10、r,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:hadoop102,hadoop103,hadoop104 create t
11、able test1(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(em
12、pid varchar primary key,name.firstname varchar,name.lastname varchar,company.name varchar,company.address varchar) column_encoded_bytes=0;2.3.4 使用spark对phoenix的读写在Phoenix中查看数据select * from STOCK_SYMBOL如下显示:在Hbase中查看数据scan STOCK_SYMBOL更多使用详情,请参考http:/phoenix.apache.org/phoenix_spark.html2.3.5 视图映射和表映
13、射的对比与总结:相比于直接创建映射表,视图的查询效率会低,原因是:创建映射表的时候,Phoenix会在表中创建一些空的键值对,这些空键值对的存在可以用来提高查询效率。使用create table创建的关联表,如果对表进行了修改,源数据也会改变,同时如果关联表被删除,源表也会被删除。但是视图就不会,如果删除视图,源数据不会发生改变。第3章 Phoenix创建Hbase二级索引3.1 配置Hbase支持Phoenix创建二级索引3.1.1 添加如下配置到Hbase的Hregionserver节点的hbase-site.xml hbase.regionserver.wal.codecorg.apac
14、he.hadoop.hbase.regionserver.wal.IndexedWALEditCodechbase.region.server.rpc.scheduler.factory.classorg.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactoryFactory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updateshbase.rpc.controllerfactory.classorg.apache.had
15、oop.hbase.ipc.controller.ServerRpcControllerFactoryFactory to create the Phoenix RPC Scheduler that uses separate queues for index and metadata updates3.1.2 添加如下配置到Hbase中Hmaster节点的hbase-site.xml中hbase.master.loadbalancer.classorg.apache.phoenix.hbase.index.balancer.IndexLoadBalancerhbase.coprocessor
16、.master.classesorg.apache.phoenix.hbase.index.master.IndexMasterObserver3.1.3 验证效果:3.2 创建索引3.2.1 phoenix的索引分类1)global index是默认的索引格式。适用于多读少写的业务场景。写数据的时候会消耗大量开销,因为索引表也要更新,而索引表是分布在不同的数据节点上的,跨节点的数据传输带来了较大的性能消耗。在读数据的时候Phoenix会选择索引表来降低查询消耗的时间。如果想查询的字段不是索引字段的话索引表不会被使用,也就是说不会带来查询速度的提升。CREATE INDEX my_index
17、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的时候会报以下异常:正常配置: hbase.zookeeper.quorum hado
18、op101,hadoop102,hadoop103Local index 和 Global index区别:Local index 由于是数据与索引在同一服务器上,所以要查询的数据在哪台服务器的哪个region是无法定位的,只能先找到region然后在利用索引。Global index 是一种分布式索引,可以直接利用索引定位服务器和region,速度更快,但是由于分布式的原因,数据一旦出现新增变化,分布式的索引要进行跨服务的同步操作,带来大量的通信消耗。所以在写操作频繁的字段上不适合建立Global index。3.2.2 三种提升效率查询方式1) CREATE INDEX my_index
19、ON my_table (v1) INCLUDE (v2)2) SELECT /*+ INDEX(my_table my_index) */ v2 FROM my_table WHERE v1 = foo3) CREATE LOCAL INDEX my_index ON my_table (v1)3.2.3 如何删除索引DROP INDEX my_index ON my_table第4章 Squirrel可视化连接Phoenix4.1 下载Squirrel的jar包官方网址http:/squirrel-4.2 在Windows环境下安装Squirrel程序1) 选择Java方式打开安装2) 自
20、定义安装目录3) 一直Next到安装完成4.3 配置Squirrel连接到Phoenix1) 复制Phoenix的client.jar包到D:worksquirrellib的lib下2) 启动Squirrel3) 配置Driver4) 添加Driver具体配置信息配置信息:Name=PhoenixExample URL = jdbc:phoenix:hadoop101,hadoop102,hadoop103:2181Java Class Path 选择D:worksquirrellibphoenix-4.14.2-HBase-1.3-client.jarClass Name = org.apa
21、che.phoenix.jdbc.PhoenixDriver5)配置Aliases6)添加Aliases具体配置信息配置信息:Name=任意Driver选择刚才添加的PhoenixURL= jdbc:phoenix:hadoop101,hadoop102,hadoop103:2181User Name = 任意Password = 任意7)测试连接是否成功双击连接Phoenix8)使用Squirrel查询数据查询sql(WEB_STAT表要提前建好并导入数据)atguiguhadoop101 bin$ psql.py ./examples/STOCK_SYMBOL.sqlatguiguhadoop101 bin$ psql.py ./examples/STOCK_SYMBOL.csvselect * from WEB_STAT;
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1