Phoenix正在改变HBase表的元信息

时间:2014-09-03 18:02:20

标签: java hadoop mapreduce hbase phoenix

我正在尝试使用Apache Phoenix在HBase表上运行SQL查询。基于official documetation,需要使用SQL查询为现有表创建模式:

CREATE TABLE TABLE_NAME (....)

我试图通过phoenix API直接连接到现有表(使用HBase API创建)来避免这种情况,但我得到了例外。 问题是当Phoenix执行此查询时,它会在桌面上创建很多东西。例如,在hbase仪表板的部分中,我可以看到phoenix将以下元数据添加到我的表中:

'QUOTES', {METHOD => 'table_att', coprocessor$1 => '|org.apache.phoenix.coprocessor.ScanRegionObserver|1|', coprocessor$2 => '|org.apache.phoenix.coprocessor.UngroupedAggregateRegionObserver|1|', coprocessor$3 => '|org.apache.phoenix.coprocessor.GroupedAggregateRegionObserver|1|', coprocessor$4 => '|org.apache.phoenix.coprocessor.ServerCachingEndpointImpl|1|', coprocessor$5 => '|org.apache.phoenix.hbase.index.Indexer|1073741823|index.builder=org.apache.phoenix.index.PhoenixIndexBuilder,org.apache.hadoop.hbase.index.codec.class=org.apache.phoenix.index.PhoenixIndexCodec'}, {NAME => '0', DATA_BLOCK_ENCODING => 'FAST_DIFF', KEEP_DELETED_CELLS => 'true'}

听起来pheonix正在改变表的元信息(它创建了一些协处理器和索引构建器),这是否会产生生产问题(干扰使用HBase API的代码)?如果是这样如何避免它?

1 个答案:

答案 0 :(得分:3)

是的,当您执行CREATE TABLECREATE VIEW时,Apache Phoenix会将协处理器添加到基础HBase表的元数据中here。这些不会干扰使用HBase API的代码,因为只有在进行API调用的客户端设置Phoenix特定属性时,才会触发协处理器执行的任何处理。

对于Phoenix VIEW,仅进行了这些元数据更改。对于Phoenix TABLE,除了这些元数据更改之外,还会向表的每一行添加一个空的KeyValue。这样做是为了提高性能,以及在所有列都设置为null时防止行“消失”。更多详情here