Phoenix使用总结

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/d6619309/article/details/50358675

对工作中预研Phoenix的使用做一些总结。

1. Phoenix环境下HBase table名大小写是敏感的

如果要用小写命名表名,必须带上双引号

2. Phoenix客户端查询超时

在Phoenix默认配置下,如果查询时间过长(超过1分钟或者更多),就可能会抛相应的TimeoutException。

解决方法为修改phoenix发布包/bin下面的hbase-site.xml增加如下配置

<property>
  <name>phoenix.query.timeoutMs</name>
  <value>3600000</value> 
</property>

<property>
  <name>hbase.rpc.timeout</name>
  <value>3600000</value>
</property>

【注意】 实际应用中不建议超时时间设置太长。

3. Phoenix二级索引表与源数据表保持同步的前提

源数据表的增、删、改操作必须通过Phoenix命令行或者客户端,才能保证二级索引表与源表保持同步。Phoenix提供的Bulk Loading同样也能保证二级索引表与源数据表保持同步。

Global indexing targets read heavy, low write uses cases. With global indexes, all the performance penalties for indexes occur at write time. We intercept the data table updates on write (DELETE, UPSERT VALUES and UPSERT SELECT), build the index update and then sent any necessary updates to all interested index tables. At read time, Phoenix will select the index table to use that will produce the fastest query time and directly scan it just like any other HBase table. By default, unless hinted, an index will not be used for a query that references a column that isn’t part of the index.
—— Phoenix官网文档说明

4. Phoenix Bulk Loading的使用

依照官网文档有Bulk Loading有两种方式往HBase导入大批量数据,分别是“Loading via PSQL”和“Loading via MapReduce”。后者尝试不成功。

(1) 使用前者来导入大批量数据,要注意Loading via PSQL的文件必须是.csv后缀,不然程序无法识别到数据文件。

(2) 使用psql.py来导入大批量数据在表名为小写的时候无法识别,会抛TableNotFoundException异常,目前暂时没有找到解决方案。

(3) 使用psql.py导入大批量数据中途可能出现警告,不知道是否会出现数据丢失。

虽然最终导入的源数据表和索引表数据行数保持一致。

5. Phoenix表的管理维护

(1) 通过Phoenix创建的表必须指定primary key(对应hbase的rowkey),列最好明确指定列族名称(除了primary key不用指定,其他列建议指定),列类型最好都指定为varchar。

(2) 通过Phoenix创建的表如果要删除,不要在HBase Shell或者使用HBase客户端API等删除,必须在Phoenix里面删除,否则会出现删除后在Phoenix还能看到该删除掉的表,但是在该表上的操作都会抛异常。并且只有在Phoenix指定删除才能删除对应的、可能存在的二级索引表。

6. Phoenix JDBC在Eclipse的开发及测试

(1) 需要将Phoenix发布包中的Phoenix-4.6.0-HBase-1.0-client.jar引入到Eclipse项目的classpath下。

(2) 开发机器配置集群机器,如果是windows开发环境,编辑C:\Windows\System32\drivers\etc目录的hosts文件,加入集群机器IP和命名。

如果是Linux开发环境,应该在/etc/hosts下加入

(3) phoenix提供的java api驱动连接hbase可以参考phoenix官网F.A.Q.

【注意】

  • HBase版本需要与集群的HBase版本对应,否则可能报找不到对应方法的异常。
  • 该测试中的Phoenix版本为了适配CDH5.4进行了修改并重新编译过,必须确保使用的Phoenix-*-client.jar是重新编译过的。
展开阅读全文

没有更多推荐了,返回首页