一、背景介绍
Phoenix是HBase的开源SQL皮肤。可以使用标准JDBC API代替HBase客户端API来创建表,插入数据和查询HBase数据。
1) 容易集成:如Spark,Hive,Pig,Flume和Map Reduce。
2) 性能好:直接使用HBase API以及协处理器和自定义过滤器,可以为小型查询提供毫秒级的性能,或者为数千万行提供数秒的性能。
3) 操作简单:DML命令以及通过DDL命令创建表和版本化增量更改。
4) 安全功能: 支持GRANT和REVOKE 。
5) 完美支持Hbase二级索引创建。
二、安装配置
1)下载安装并解压压缩包。这里下载的是phoenix-hbase-1.4-4.16.1-bin.tar.gz。解压命令如下:
tar -zxvf phoenix-hbase-1.4-4.16.1-bin.tar.gz
2)配置环境变量。将以下部分放在环境变量文件中。记得把$PHOENIX_HOME换成自己的。
export PHOENIX_HOME=/home/LL/phoenix/phoenix-hbase-1.4-4.16.1-bin
export PHOENIX_CLASSPATH=$PHOENIX_HOME
export PATH=$PATH:$PHOENIX_HOME/bin
编辑好后切记要让环境变量文件生效:
source .bashrc
3)复制server文件到$HBASE_HOME/lib目录下(每台机器都要发送)
复制到本机:
cp phoenix-server-hbase-1.4-4.16.1.jar /home/LL/hbase/hbase-1.4.13/lib
复制到集群中其他节点上:
scp -r ./phoenix-server-hbase-1.4-4.16.1.jar LL@westgisB041:/home/LL/hbase/hbase-1.4.13/lib
4)进入hbase/conf目录,启用二级索引。(建立二级索引,将业务需要的数据联立建立索引,方便查询,但是如果用 hbase 维护的话会很麻烦)
·为什么要做二级索引?
对于HBase而言,如果想精确地定位到某行记录,唯一的办法是通过rowkey来查询。如果不通过rowkey来查找数据,就必须逐行地比较每一列的值,即全表扫描。对于较大的表,全表扫描的代价是不可接受的。但是,很多情况下,需要从多个角度查询数据。例如,在定位某个人的时候,可以通过姓名、身份证号、学籍号等不同的角度来查询,要想把这么多角度的数据都放到rowkey中几乎不可能(业务的灵活性不允许,对rowkey长度的要求也不允许)。所以,需要secondary index(二级索引)来完成这件事。secondary index的原理很简单,但是如果自己维护的话则会麻烦一些。现在,Phoenix已经提供了对HBase secondary index的支持。
本段转载自CSDN博主「会星一击」的原创文章。
原文链接:https://blog.csdn.net/sinat_36121406/article/details/82839003
进入$HBASE_HOME/conf,修改hbase-site.xml文件内容,加入下面这一段内容:
<property>
<name>hbase.regionserver.wal.codec</name>
<value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>
<property>
<name>phoenix.functions.allowUserDefinedFunctions</name>
<value>true</value>
<description>enable UDF functions</description>
</property>
将hbase-site.xml拷贝到$PHOENIX_HOME/bin目录下:
cp hbase-site.xml /home/LL/phoenix/phoenix-hbase-1.4-4.16.1-bin/bin
修改配置后,重启hbase。
三、启动phoenix及操作
进入$PHOENIX_HOME/bin目录下,输入以下命令:
./sqlline.py
输入!tables:
!tables
创建表格:
create table test_user(emp_id bigint primary key,emp_name varchar(10));
select * from test_user;
插入数据:
upsert into test_user values(1,'luna');
查询数据:
select * from test_user;
删除记录:
delete from test_user where emp_id=1;
删除表:
drop table test_user;
退出命令行:
!quit