对工作中预研Phoenix的使用做一些总结。
1. Phoenix环境下HBase table名大小写是敏感的
如果要用小写命名表名,必须带上双引号
2. Phoenix客户端查询超时
在Phoenix默认配置下,如果查询时间过长(超过1分钟或者更多),就可能会抛相应的TimeoutException。
解决方法为修改phoenix发布包/bin下面的hbase-site.xml增加如下配置
phoenix.query.timeoutMs 3600000 hbase.rpc.timeout 3600000
3. Phoenix二级索引表与源数据表保持同步的前提
源数据表的增、删、改操作必须通过Phoenix命令行或者客户端,才能保证二级索引表与源表保持同步。Phoenix提供的Bulk Loading同样也能保证二级索引表与源数据表保持同步。
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) 使用前者来导入大批量数据,要注意Loading via PSQL的文件必须是.csv后缀,不然程序无法识别到数据文件。
(2) 使用psql.py来导入大批量数据在表名为小写的时候无法识别,会抛TableNotFoundException异常,目前暂时没有找到解决方案。
(3) 使用psql.py导入大批量数据中途可能出现警告,不知道是否会出现数据丢失。
虽然最终导入的源数据表和索引表数据行数保持一致。