phoenix索引状态变DISABLE修复
- 修复处于DISABLED状态的索引:
在phoenix客户端将索引状态置为UNUSABLE,这样索引挂掉之前的数据可以跳过,减少修复数据量:
ALTER INDEX IF EXISTS METADATA_AE_HIVE_COLUMN_QN_INDEX ON METADATA.AE_HIVE_COLUMN UNUSABLE;
如果上一步报错了,某些情况下不允许设置为UNUSABLE,那需要设置为REBUILD:
ALTER INDEX IF EXISTS METADATA_AE_HIVE_COLUMN_QN_INDEX ON METADATA.AE_HIVE_COLUMN REBUILD;
但是如果大表的话,REBUILD会超时,不过没关系,执行下一步通过MR任务生成索引。
- 通过MR任务生成索引数据并导入:
执行认证,tbds认证或者kerberos认证等,可以用hdfs做认证,不会有权限问题,然后执行下面命令,用后台挂起方式进行,因为运行时间比较长,终端非常可能会断掉引起异常:
nohup hbase org.apache.phoenix.mapreduce.index.IndexTool -Dmapreduce.reduce.java.opts="-Xmx8192m" -Dmapreduce.reduce.memory.mb=8500 --schema METADATA --data-table AE_HIVE_COLUMN --index-table METADATA_AE_HIVE_COLUMN_QN_INDEX --output-path /tmp/hbase/indexes/ > log 2>&1 &
Phoenix的!tables命令看不到索引表状态
使用!tables命令看不到INDEX STATE这一列。
原因分析:
sqlline中的outputformat默认为table类型,这种比较占用横向空间,如果列数太多有些就会隐藏。
处理方式1:
设置宽度!set maxwidth 3000,一行数据会变成两行显示。
处理方式2:
更改outputformat为csv类型看到,命令:!outputformat csv。
之后再执行!tables就可以看到很多列了,只不过没有table类型美观。
outputformat可选类型:
phoenix索引表的region分区不正常

因为索引表是没有数据的,truncate '表名'清空之后,可以通过修复索引再恢复数据。