本文档介绍了您在使用HBase SQL(Phoenix)过程中遇到的常见问题并给出解决办法。
ali-phoenix最新版本在Maven中央仓库发布了哪些JAR包?
- ali-phoenix 4.x发布包如下:
GroupId ArtifactId Latest Version com.aliyun.phoenix ali-phoenix 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-hive 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-spark 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-pherf 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-queryserver 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-queryserver-client 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-pig 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-flume 4.12.0-AliHBase-1.1-0.9 com.aliyun.phoenix ali-phoenix-core 4.12.0-AliHBase-1.1-0.9 - ali-phoenix 5.x发布包如下:
GroupId ArtifactId Latest Version com.aliyun.phoenix ali-phoenix-shaded-thin-client 5.2.5-HBase-2.x com.aliyun.phoenix ali-phoenix-shaded-thin-client 5.2.5-HBase-2.x 说明 避免轻客户端中包与业务三方包冲突,推荐使用轻客户端shade包。
ali-phoenix JDBC URL格式是什么样的?
- 重客户端DRIVEphoenix
URL语法
简单URL示例jdbc:phoenix:[[ZK_HOST1:port, ZK_HOST2:port, ZK_HOST3:port | comma-separated ZooKeeper Quorum [:port] [:hbase root znode] ]
jdbc:phoenix:localhost jdbc:phoenix:localhost:123:/hbase jdbc:phoenix:v1,v2,v3:123:/hbase jdbc:phoenix:v1:2181,v2:2181,v3:2181:/hbase jdbc:phoenix:v1:2181,v2:2181,v3:2181
- 轻客户端DRIVE
URL语法
jdbc:phoenix:thin:[key=value[;key=value...]]
简单URL示例jdbc:phoenix:thin:url=http://localhost:8765;serialization=PROTOBUF
是否支持QueryServer?
- HBase1.x版本使用Phoenix4.x重客户端模式,需要用户自行搭建QueryServer服务。
- HBase2.0版本增加HBase SQL服务,默认开启QueryServer。
是否支持Tracing Web Application?
当前云HBase上的ali-phoenix此不支持,此功能正在开发中。
构建同步的二级索引超时怎么办?
<property>
<name>hbase.rpc.timeout</name>
<value>60000000</value>
</property>
<property>
<name>hbase.client.scanner.timeout.period</name>
<value>60000000</value>
</property>
<property>
<name>phoenix.query.timeoutMs</name>
<value>60000000</value>
</property>
HBase2.0上Phoenix5.x版本,可在控制台参数管理中修改上述参数,并重启HBase SQL服务,注意不需要重启HBase,仅重启HBase SQL服务(Phoenix)即可。如何开通Namespace Mapping?
- 4.x开通步骤
- 在客户端增加以下配置。
<property> <name>hbase.rpc.timeout</name> <value>60000000</value> </property> <property> <name>hbase.client.scanner.timeout.period</name> <value>60000000</value> </property> <property> <name>phoenix.query.timeoutMs</name> <value>60000000</value> </property>
- 找云HBase 答疑开通Server端参数。
- 重启HBase集群。
- 在客户端增加以下配置。
- 5.x开通步骤
- 登录控制台。
- 参数配置。
phoenix.schema.isNamespaceMappingEnabled
和phoenix.schema.mapSystemTablesToNamespace
配置为 true - 重启 HBase 集群。
- 重启 SQL 服务。
说明 这里需要配置两组相同的参数,参数描述是不相同的,一组是query server
,一组是HBase server
端的,都需要设置。
是否支持连接池?
Phoenix4.x最新版本的4.12.0.X版本支持,具体参考PhoenixConnectionPool.java
。
Phoenix5.x版本基于轻客户端实现,PhoenixConnectionPool.java
不能使用,建议使用社区第三方连接池,比如mybatis,可参考相关参考。
执行创建索引时间太长能否断开客户端链接?
不能断开客户端链接。执行create index主要有两个步骤,第一步在server端同步源表数据到索引表, 第二步在客户端发起请求修改索引表状态设置为active。其中第一步一般是客户端发起请求在server端完成后。
创建同步索引表,同步索引数据的速度怎么样?
一般情况下1000W数据创建索引需要5~20min, 具体情况视集群配置和资源使用情况而定。
创建索引由于时间太长,客户端断开了链接怎么办?
- 通过
alter index
命令rebuild索引。 - 删除building状态的索引表,配置更大的客户端超时时间,重新创建索引。
关系型数据库怎么导入云HBase的phoenix表中?
通过datax导入,具体操作请参见示例参考。
查询时发生遇到ERROR 599(42912): Default enable Force index, please set phoenix.force.index=false
to disable it....,
应该怎么处理?
为了避免查询扫全表,会在SQL编译阶段,检查查询条件是否有主键或者索引列作为过滤条件,如果没有会产生此异常。如果查询确实需要非主键或非索引列作为过滤条件的列,phoenix4.x版本可以在客户端的hbase-site.xml
文件中配置phoenix.force.index
为false
,重新打开客户端,即可生效。Phoenix5.x在控制台参数管理中修改phoenix.force.index
为false
,重启HBase SQL服务即可。
通过springboot使用druid连接池报java.sql.SQLException: java.lang.IllegalArgumentException: Connection is null or closed
应该怎么处理?
由于Phoenix内部会缓存链接,上层再使用一层连接池时,会出现部分链接被关闭的情况,所以目前不推荐使用此类方式。
使用python客户端连接QueryServer时,连接闲置一段时间后再进行读写时报错phoenixdb.errors.InternalError: ('', None, None, None)
- 下载阿里phoenix-python客户端,单击下载。
- 如果已安装phoenix-python驱动,需要执行如下命令进行删除。
rm -rf /usr/lib/python${version}/site-packages/phoenixdb*
- 解压后在phoenixdb目录执行如下命令安装驱动。
python setup.py install
Phoenix是否支持多租户?
暂不支持,包括grant
和revoke
命令。