安装
原理
二级索引
常见的二级索引方案有下面几种:
- MapReduce方案
- ITHBASE方案
- IHBASE方案
- Coprocessor方案
- ES+Hbase方案
- Phoenix二级索引方案
Phoenix
安装
- 下载并解压
根据HBase版本下载对应的Phoenix安装包,例如HBase2.2.4,下载对应的包apache-phoenix-5.0.0-HBase-2.0,放到一个目录下,这里跟hbase放到同一个目录/usr/local/hbase
,然后解压
tar -zxvf apache-phoenix-5.0.0-HBase-2.0-bin.tar.gz
- 拷贝jar包及配置文件
将解压后的两个jar包拷贝到hbase的lib目录,然后将hbase的con目录下hbase-site.xml拷贝到Phoenix的bin目录
cp /usr/local/hbase/apache-phoenix-5.0.0-HBase-2.0-bin/phoenix-5.0.0-HBase-2.0-client.jar /usr/local/hbase/hbase-2.2.4/lib/phoenix-5.0.0-HBase-2.0-client.jar
cp /usr/local/hbase/apache-phoenix-5.0.0-HBase-2.0-bin/phoenix-core-5.0.0-HBase-2.0.jar //usr/local/hbase/hbase-2.2.4/lib/phoenix-core-5.0.0-HBase-2.0.jar
cp /usr/local/hbase/hbase-2.2.4/conf/hbase-site.xml /usr/local/hbase/apache-phoenix-5.0.0-HBase-2.0-bin/bin/hbase-site.xml
- 重启hbase,启动Phoenix
在这之前要保证hdfs、hbase、zk都是启动状态,如果没有启动则按照下面步骤启动
# 分别配置好hdfs、hbase、zk的环境变量,直接执行sh脚本启动
start-dfs.sh
start-hbase.sh
zkServer.sh start
stop-hbase.sh
# hbase-daemon.sh stop master
# hbase-daemon.sh stop regionserver
start-hbase.sh
cd /usr/local/hbase/apache-phoenix-5.0.0-HBase-2.0-bin
bin/sqlline.py vm0:2181
- 测试
# 查看表
!tables
# 创建表
create table user(
id varchar primary key,
info.name varchar,
info.password varchar
);
# 插入数据(upsert,不是insert)
upsert into user(id,name,password) values('001','admin','admin');
upsert into user(id,name,password) values('002','admin','admin');
# 查询数据
select * from user;
# 删除数据
delete from user where id='002';
在hbase中查看通过Phoenix创建的表
hbase shell
# Phoenix中创建的表在hbase中是大写的
scan "USER"
- java项目集成Phoenix
<dependency>
<groupId>org.apache.phoenix</groupId>
<artifactId>phoenix-core</artifactId>
<version>5.0.0-HBase-2.0</version>
</dependency>
还需要引入jar包phoenix-5.0.0-HBase-2.0-client.jar
private static void testSelect() {
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
connection = DriverManager.getConnection("jdbc:phoenix:vm0:2181","root","root");
statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery("select * from USER ");
while(resultSet.next()){
String id = resultSet.getString("ID");
System.out.println(id);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
statement.close();
connection.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
private static void testInsert(){
Connection connection = null;
Statement statement = null;
try {
Class.forName("org.apache.phoenix.jdbc.PhoenixDriver");
connection = DriverManager.getConnection("jdbc:phoenix:vm0:2181","root","root");
statement = connection.createStatement();
int b = statement.executeUpdate("upsert into user(id,name,password) values('006','admin','admin')");
System.out.println(b);
connection.commit();
} catch (Exception e) {
e.printStackTrace();
} finally {
try {
connection.close();
statement.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}