Phoenix是基于HBase的,而Phoenix的索引其实是HBase的二级索引,当Phoenix的索引处于disable状态时,整个Phoenix表是无法正常使用的,要将索引修复为enable状态,往往需要重建索引,这对应一些大表来说,往往需要花费几个小时是时间,那么这几个小时,系统基本上就处于不可用状态,这对应现网系统来说,往往是不可接受的。
其实Phoenix有3个隐藏参数,这些参数在官网文档没有体现,但实际上这3个参数非常重要,可以解决上面提到的问题。
闲话不说,先来讲讲我们发现的问题的。
我们在调测功能时,突然发现Phoenix表不能使用,查看日志,发现体现如下异常:
代码语言:javascript复制[RpcServer.default.FPBQ.Fifo.handler=112,queue=8,port=6005] index PhoenixIndexFailurePolicy:handleFailure failed
java.io.IOException: org.apache.hadoop.hbase.DoNotRetryIOException: Attempt to disable ODS.T_TABLE failed.
用下面语句检查,发现表索引失效:
代码语言:javascript复制select TABLE_NAME,DATA_TABLE_NAME,INDEX_TYPE,INDEX_STATE,INDEX_DISABLE_TIMESTAMP from sys