1.下载对应的phoenix版本(版本一定要对应!!!)
地址:archive.apache.org/dist/phoenix
2.解压后将phoenix-xxxx-HBase-xxxx-client.jar、phoenix-xxxx-HBase-xxxx-server.jar、phoenix-core-xxxx-HBase-xxxx.jar三个文件分别放入各个节点的hbase目录下的lib目录下。
3.将hbase的配置文件hbase-site.xml(我的文件路径/usr/local/hbase/conf/hbase-site.xml)拷贝到phoenix的bin目录下,覆盖原有的配置文件。
4.启动hbase,然后进入phoenix目录下的bin目录,执行./sqlline.py zookeeper地址(hbase-site.xml下的hbase.zookeeper.quorum值)
例如我的三个节点Master,Slave1,Slave2,则执行./sqlline.py Master,Slave1,Slave2。
Caused by: org.apache.hadoop.hbase.ipc.RemoteWithExtrasException(org.apache.hadoop.hbase.DoNotRetryIOException): org.apache.hadoop.hbase.DoNotRetryIOException: Class org.apache.phoenix.coprocessor.MetaDataEndpointImpl cannot be loaded Set hbase.table.sanity.checks to false at conf or table descriptor if you want to bypass sanity checks
1>关闭hbase
2>在每个节点hbase的配置文件hbase-site.xml中添加以下参数:(在phoenix的bin目录下的hbase-site.xml下也要添加)
<property>
<name>hbase.table.sanity.checks</name>
<value>false</value>
</property>
3>重启hbase
Error:SYSTEM.CATALOG(state=08000,code=101)
1>先启动hbase
2>在hbase的bin目录下执行hbase zkcli,执行成功的话会显示每个节点名称和端口号
3>接着执行ls /hbase/table
4>如果有以下表:SYSTEM.CATALOG,SYSTEM.SEQUENCE,SYSTEM.STATS,SYSTEM.FUNCTION
则依次执行 rmr /hbase/table/SYSTEM.CATALOG
rmr /hbase/table/SYSTEM.SEQUENCE
rmr /hbase/table/SYSTEM.STATS
rmr /hbase/table/SYSTEM.FUNCTION
5>重启hbase
Error: ERROR 204 (22008): Values in UPSERT must evaluate to a constant. (state=22008,code=204)
phoenix 插入的数据需用单引号,用双引号则报错!!!
例如:upsert into “hbase1” values (“002”,“aaa”,“20”); 报错!!!
upsert into “hbase1” values (‘002’,‘aaa’,‘20’); 正确。
!table 查看所有表信息
create table if not exists student(id integer primary key,name varchar(20)); 创建表
upsert into student(id,name) values(1,‘aaa’); 添加数据
!describe “STUDENT”; 查看表结构
select * from student where id=1; 查询数据
!quit 退出
1、hbase中建立表hbase1
2、phoenix建立映射表hbase1:create table “TableName”(“ROW名” varchar primary key, “列簇”.“列名” varchar , “列簇”.“列名” varchar , “列簇”.“列名” varchar);
(两者表名一致)
例如:
hbase中:create “hbase1”,“h1”
put “hbase1”,“001”,“h1:name”,“zzz”
put “hbase1”,“001”,“h1:age”,“19”
phoenix中:create table “hbase1”(“ROW” varchar primary key,“h1”.“name” varchar,“h1”.“age” varchar);
3、此时在phoenix中操作表“hbase1”,hbase中的表“hbase1”也会有相应变化。
1、全局索引Global Indexing:(适用于读大于写)
在HBase集群的每个regionserver节点(不带master)的hbase-site.xml中加入如下配置并重启HBase集群
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
创建全局索引:
create index “my_index” on “hbase1”(“h1”.“name”);
删除索引:
drop index “my_index” on “hbase1”;
查看索引使用情况:
explain select “name” from “hbase1”;
2、本地检索Local indexing:(适用于写大于读)
在HBase集群的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>
!!!如果使用的是Phoenix 4.3+的版本的话还需要在HBase集群的每个regionserver节点(不带master)的hbase-site.xml添加如下配置
<property>
<name>hbase.coprocessor.regionserver.classes</name>
<value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>
</property>
创建本地索引:
create local index “my_index2” on “hbase1”(“h1”.“age”);