一、Phoenix的安装
编译
修改pom->针对于Apache版本
<hbase.version>0.98.6-hadoop2</hbase.version>
<hadoop-two.version>2.5.0</hadoop-two.version>针对CDH版本:需要添加CDH源
- 解压源码包,进入路径,进行编译
mvn clean package -DskipTests
- 编译完成,在Phoenix-assembly/target目录下会有编译好的包
- 解压编译好的包
tar -zxvf phoenix-4.2.2.tar.gz -C /opt/modules/
- 修改配置
- 拷贝Phoenix的jar包到hbase的每一台regionserver的lib目录下
phoenix-4.2.2-client.jar
phoenix-core-4.2.2.jar
cp phoenix-4.2.2-client.jar ../hbase-0.98.6-hadoop2/lib/
cp lib/phoenix-core-4.2.2.jar ../hbase-0.98.6-hadoop2/lib/
- 重启hbase集群
- 将hbase集群的hbase-site.xml放到Phoenix的bin目录下
cp ../hbase-0.98.6-hadoop2/conf/hbase-site.xml bin/
- 拷贝Phoenix的jar包到hbase的每一台regionserver的lib目录下
启动Phoenix
bin/sqlline.py hadoop-senior01.ibeifeng.com:2181
做hbase表的映射
- 大小写:Phoenix默认全部是大写
- 这里一定要注意的是表名和列族以及列名需要用双引号括起来,因为HBase是区分大小写的,如果不用双引号括起来的话Phoenix在创建表的时候会自动将小写转换为大写字母,这样HBase中会创建另外一张表.
create table "t5"("ROW" varchar primary key,"info"."name" varchar,"info"."age" varchar, "info"."sex" varchar );
二、phoenix二级索引
如果要启用phoenix的二级索引功能,需要对HMaster以及每一个RegionServer上的hbase-site.xml进行额外的配置。
首先,在每一个RegionServer的hbase-site.xml里加入如下属性:
<property> <name>hbase.regionserver.wal.codec</name> <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value> </property>
然后在每一个master的hbase-site.xml里加入如下属性
<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>
- 重启HBase集群
三、创建表
HBase中创建三张表
create 'call-detail','user','info' create 'tel-net-flow','user','info' create 'tel-net-detail','user','info'
- 插入测试数据
put 'call-detail','1553333666620161221163701','user:name','yihao'
put 'call-detail','1553333666620161221163701','user:birth','19900711'
put 'call-detail','1553333666620161221163701','user:sex','male'
put 'call-detail','1553333666620161221163701','info:addr','shanghai'
put 'call-detail','1553333666620161221163701','info:callType','callin'
put 'call-detail','1553333666620161221163701','info:other','17812345678'
put 'call-detail','1553333666620161221163701','info:duration','90'
put 'call-detail','1553333666620161221163701','info:telType','civil'
put 'call-detail','1553333666620161221163701','info:money','1.2'
put 'tel-net-flow','1553333666620161221165312','user:name','yihao'
put 'tel-net-flow','1553333666620161221165312','user:birth','19900711'
put 'tel-net-flow','1553333666620161221165312','user:sex','male'
put 'tel-net-flow','1553333666620161221165312','info:addr','shanghai'
put 'tel-net-flow','1553333666620161221165312','info:telType','3G'
put 'tel-net-flow','1553333666620161221165312','info:chargeType','liuliang'
put 'tel-net-flow','1553333666620161221165312','info:isDirect','true'
put 'tel-net-flow','1553333666620161221165312','info:totalFlowAmt','234'
put 'tel-net-flow','1553333666620161221165312','info:telmoney','0.000'
put 'tel-net-detail','1553333666620161221165733','user:name','yihao'
put 'tel-net-detail','1553333666620161221165733','user:birth','19900711'
put 'tel-net-detail','1553333666620161221165733','user:sex','male'
put 'tel-net-detail','1553333666620161221165733','info:buziType','chat'
put 'tel-net-detail','1553333666620161221165733','info:flowType','WeiChat'
put 'tel-net-detail','1553333666620161221165733','info:netAddr','223.167.82.210'
- phoenix创建HBase映射
CREATE TABLE "call-detail"(
"ROW" varchar primary key,
"user"."name" varchar, "user"."birth" varchar, "user"."sex" char(1),
"info"."addr" varchar, "info"."callType" varchar, "info"."other" varchar, "info"."duration" double,
"info"."telType" varchar, "info"."money" double);
CREATE TABLE "tel-net-flow"(
"ROW" varchar primary key,
"user"."name" varchar, "user"."birth" varchar, "user"."sex" varchar,
"info"."addr" varchar, "info"."telType" varchar, "info"."chargeType" varchar,
"info"."isDirect" varchar, "info"."totalFlowAmt" double, "info"."telMoney" double
);
CREATE TABLE "tel-net-detail"(
"ROW" varchar primary key,
"user"."name" varchar, "user"."birth" varchar, "user"."sex" varchar,
"info"."buziType" varchar, "info"."flowType" varchar, "info"."netAddr" varchar,
"info"."netName" varchar
);
四、创建索引:
覆盖索引
CREATE INDEX CALLDETAILINDEX ON "call-detail"("info"."callType") INCLUDE("info"."addr") explain select * from "call-detail" limit 10; explain select "addr" from "call-detail" where "callType"='callin';
全局索引
CREATE INDEX call_detail_globalindex on "call-detail"("user"."name"); explain select "user"."name" from "call-detail" limit 10;
本地索引
CREATE LOCAL INDEX call_detail_localindex ON "call-detail"("user"."name");