Phoenix 索引说明


官方文档对于二级索引的说明

Secondary Indexing

在 Phoenix 中,索引是通过在 HBase 中自动新建表的方式实现的,Phoenix 2.0 之前只支持索引不可变数据,2.1 开始支持索引可变数据、不可变数据;索引不可变表的速度比可变表速度要更快,但是不可变表数据无法更新;

Phoenix 开启索引的配置


开启 Phoenix 的索引功能,需要在全部集群下的 hbase-site.xml 中加入以下配置,之后重启所有集群。该配置用于允许写入自定义 WAL,以确保 Phoenix 可以正确写入、重建索引。

<property>
    <name>hbase.regionserver.wal.codec</name>
    <value>org.apache.hadoop.hbase.regionserver.wal.IndexedWALEditCodec</value>
</property>

对于 Phoenix 4.8 - 4.11 版本,官方文档建议加入以下配置。通过确保更新索引的优先等级高于数据更新,防止全局索引(HBase 0.98.4+ 、Phoenix 4.3.1+)维护期间引起死锁。

<property>
  <name>hbase.region.server.rpc.scheduler.factory.class</name>
  <value>org.apache.hadoop.hbase.ipc.PhoenixRpcSchedulerFactory</value>
</property>
<property>
  <name>hbase.rpc.controllerfactory.class</name>
  <value>org.apache.hadoop.hbase.ipc.controller.ServerRpcControllerFactory</value>
</property>

此外,对于 phoenix 4.7 及以下版本,需要配置以下,以启用本地索引,4.8 版本及以上启用本地索引无需进行该配置。

<property>
  <name>hbase.master.loadbalancer.class</name>
  <value>org.apache.phoenix.hbase.index.balancer.IndexLoadBalancer</value>
</property>
<property>
  <name>hbase.coprocessor.master.classes</name>
  <value>org.apache.phoenix.hbase.index.master.IndexMasterObserver</value>
</property>
<property>
  <name>hbase.coprocessor.regionserver.classes</name>
  <value>org.apache.hadoop.hbase.regionserver.LocalIndexMerger</value>
</property>

全局索引 Global Index