1. 概述编辑
Apache Phoenix 通过结合联机事务处理和 Hadoop 运行分析平台的完美结合来针对低延迟应用程序,支持标准 SQL 和有包含事务的原子性、隔离性、一致性、持久性的 JDBC API的能力,并且后期绑定灵活,基于 NoSQL 世界的读时模式,以 HBase 作为后台存储。本文介绍如何在 FineBI 中连接 Apache Phoenix 数据库。
2. 数据连接编辑
2.1 配置信息
驱动 | URL | 驱动下载链接 | 支持数据库版本 |
---|---|---|---|
org.apache.phoenix.jdbc.PhoenixDriver | jdbc:phoenix:ip:port/dbname | phoenix-4.12.0-HBase-1.2-client.jar | 1.2 |
注:数据库 JAR 包容易和其他 Hadoop 系列的 JAR 包冲突(Hadoop、Hive、Impala、星环等等),如果连不上,需要删除冲突的数据库的 JAR。
2.2 连接步骤
2.2.1 拷贝 JAR 包到 FineBI 工程
从配置信息驱动下载链接中下载 Apache Phoenix 驱动包,并将驱动包放到%FineBI%\webapps\webroot\WEB-INF\lib下,重启FineBI 。
2.2.2 管理员登录数据决策系统
选择管理系统>数据连接>数据连接管理,点击新建数据连接,在所有选项下选择Apache Phoenix,如下图所示:
2.2.3 输入配置信息并测试连接
1)进入数据连接配置页面,按照前面提供的配置信息,输入自身数据库的对应信息。
若选择 Kerberos 认证,则需填入注册过 Kdc 的客户端名称、Keytab 密钥路径和 Kerberos 认证对应 URL ,参考 数据连接Kerberos认证 ,如下图所示:
若不选择 Kerberos 认证,则跟其他数据库设置一致,按照本文 2.1 章节提供的配置信息,输入数据库的对应信息,可选择填入高级设置信息,详情参见 配置数据连接 ),如下图所示:
注:根据提供的配置信息,输入数据库的对应信息进行数据配置后,数据连接 URL 处会自动解析,但是对于一些特殊场景解析出来的结果可能会有区别,有可能会导致连接不上,此时建议直接复制链接至数据连接 URL 处,防止自动解析错误。
2)点击测试连接,或者在模式下点击连接数据库,若弹出「连接成功」提示框,则表示成功连接上数据库,如下图所示:
2.2.4 选择模式
1)测试连接成功后可以选择模式,根据需要选择对应模式,若不进行选择,则默认为第一个模式。如下图所示:
2)模式选择后点击右上角的保存按钮,该数据连接即添加成功。如下图所示:
3. 注意事项编辑
3.1查询语句
1)A join B on A.a=B.b,A B 不支持子查询。可能导致引擎开启实时数据时的关联无法正常使用, 只能走内存化。
2)尽量避免使用多层嵌套 SQL 语句。多层嵌套可能会 SQL 报错,如果用户原本的 SQL 数据集已经有 SQL 嵌套, 引擎开启实时数据时的查询可能会出现问题。
例如 SQL 语句 select T_2.a from ( select T_1.a from ( select * from A) T_1 ) T_2 会报错。
3.2 问题报错及解决方案
1)描述:JDBC 访问数据库无法连接, 提示 get locations 错误或者 zookeeper 找不到对应的地址。
解决方法:
检查/etc/hosts 中的机器名对应IP是否为局域网IP;
检查/etc/hostname中机器名设置和/etc/hosts中是否配置一致;
检查 BI 所在机器 hosts 配置的 IP+ 机器名是否正确。
2)描述:BI 测试连接失败, 报错 Caused by: java.sql.SQLException: org.apache.hadoop.hbase.DoNotRetryIOException: java.lang.IllegalAccessError: tried to access method com.google.common.base.Stopwatch.<init>()V from class org.apache.hadoop.hbase.zookeeper.MetaTableLocator
解决方法:
将 guava 包替换为 guava-16.0.1.jar 。
3)描述:BI 测试连接失败,报错:ERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabledERROR 726 (43M10): Inconsistent namespace mapping properties. Cannot initiate connection as SYSTEM:CATALOG is found but client does not have phoenix.schema.isNamespaceMappingEnabled enabled报错截图:
解决方法:
如果使用了 Hbase 中的自定义 namespace ,不仅仅使用 default ,那么在 Phoenix 中与之对应的是 schema 的概念。但是默认并没有开启,需要在 hbase-site.xml 中增加以下配置项:
具体代码如下所示:
<property>
<name>phoenix.schema.isNamespaceMappingEnabled</name>
<value>true</value>
</property>
<property>
<name>phoenix.schema.mapSystemTablesToNamespace</name>
<value>true</value>
</property>