phoenix 5.0 创建二级索引后新增、删除数据报错
折腾了半天:
报错内容:
Error: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 1 action: org.apache.phoenix.hbase.index.builder.IndexBuildingFailureException: Failed to build index for unexpected reason!
at org.apache.phoenix.hbase.index.util.IndexManagementUtil.rethrowIndexingException(IndexManagementUtil.java:206)
at org.apache.phoenix.hbase.index.Indexer.preBatchMutate(Indexer.java:351)
at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$28.call(RegionCoprocessorHost.java:1010)
at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost$28.call(RegionCoprocessorHost.java:1007)
at org.apache.hadoop.hbase.coprocessor.CoprocessorHost$ObserverOperationWithoutResult.callObserver(CoprocessorHost.java:540)
at org.apache.hadoop.hbase.coprocessor.CoprocessorHost.execOperation(CoprocessorHost.java:614)
at org.apache.hadoop.hbase.regionserver.RegionCoprocessorHost.preBatchMutate(RegionCoprocessorHost.java:1007)
at org.apache.hadoop.hbase.regionserver.HRegion$MutationBatchOperation.prepareMiniBatchOperations(HRegion.java:3466)
at org.apache.hadoop.hbase.regionserver.HRegion.doMiniBatchMutate(HRegion.java:3875)
at org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:3833)
at org.apache.hadoop.hbase.regionserver.HRegion.batchMutate(HRegion.java:3764)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.doBatchOp(RSRpcServices.java:1027)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.doNonAtomicBatchOp(RSRpcServices.java:959)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.doNonAtomicRegionMutation(RSRpcServices.java:922)
at org.apache.hadoop.hbase.regionserver.RSRpcServices.multi(RSRpcServices.java:2666)
at org.apache.hadoop.hbase.shaded.protobuf.generated.ClientProtos$ClientService$2.callBlockingMethod(ClientProtos.java:42014)
at org.apache.hadoop.hbase.ipc.RpcServer.call(RpcServer.java:409)
at org.apache.hadoop.hbase.ipc.CallRunner.run(CallRunner.java:130)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:324)
at org.apache.hadoop.hbase.ipc.RpcExecutor$Handler.run(RpcExecutor.java:304)
Caused by: java.lang.VerifyError: org/apache/phoenix/hbase/index/covered/data/IndexMemStore$1
at org.apache.phoenix.hbase.index.covered.data.IndexMemStore.<init>(IndexMemStore.java:82)
at org.apache.phoenix.hbase.index.covered.LocalTableState.<init>(LocalTableState.java:57)
at org.apache.phoenix.hbase.index.covered.NonTxIndexBuilder.getIndexUpdate(NonTxIndexBuilder.java:52)
at org.apache.phoenix.hbase.index.builder.IndexBuildManager.getIndexUpdate(IndexBuildManager.java:90)
at org.apache.phoenix.hbase.index.Indexer.preBatchMutateWithExceptions(Indexer.java:503)
at org.apache.phoenix.hbase.index.Indexer.preBatchMutate(Indexer.java:348)
... 18 more
: 1 time, servers with issues: hbase,16020,1542002334452 (state=,code=0)
其实呢,这个错误。哎
按顺序执行:
create table test(
id integer not null primary key,
name varchar,
age integer
);
upsert into test values(1,'wjc',18);
upsert into test values(2,'xb',19);
create index idx_test_name on test(name);
upsert into test values(3,'xm',28); -- 这一步报错,只有删除二级索引才正常。
最终是版本兼容性的问题:
目前phoenix5.0 是最新的版本,支持 HBase2.0
前人挖坑,后人填。哈哈哈。
原来项目使用的是:HBase2.0.1 ,请注意 多了个.1
你没看错,Phoenix5.0 不兼容 HBase2.0.1。所以更新索引报错了。
解决方法: 将环境中 HBase2.0.1 ,全部修改为 HBase2.0.0,替换后测试正常!!