我们在项目中使用了Phoenix 5.0.0最新版,在通过Phoenix5.0.0导入数据的时候,出现了这个错误。
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
: 100 times, servers with issues: c9d60ba3a37b,60020,1603882654568
at org.apache.phoenix.execute.MutationState.send(MutationState.java:1058)
at org.apache.phoenix.execute.MutationState.send(MutationState.java:1344)
at org.apache.phoenix.execute.MutationState.commit(MutationState.java:1167)
at org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:670)
at org.apache.phoenix.jdbc.PhoenixConnection$3.call(PhoenixConnection.java:666)
at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53)
at org.apache.phoenix.jdbc.PhoenixConnection.commit(PhoenixConnection.java:666)
at org.apache.calcite.avatica.jdbc.JdbcMeta.commit(JdbcMeta.java:904)
... 20 more
Caused by: org.apache.hadoop.hbase.client.RetriesExhaustedWithDetailsException: Failed 100 actions: 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:3542)
at org.apache.hadoop.hbase.regionserver.HRegion.doMiniBatchMutate(HRegion.java:3952)
这个错误,目前只能做降级处理,我们先使用docker搭建Phoenix4.14.3+HBase1.4环境,Docker compose如下:
hbase:
image: boostport/hbase-phoenix-all-in-one:1.4-4.14
container_name: hbase
volumes:
- /opt/hbase/data:/tmp
ports:
- 2181:2181
- 8765:8765
最后使用下面两个命令进行访问:
#>docker exec -it **** /bin/bash
#>export HBASE_CONF_DIR=/opt/hbase/conf/
#>/opt/phoenix-server/bin/sqlline.py localhost
为了减少每次都要export下,可以编辑虚机vi ~/.bashrc
加入source /etc/profile
然后vi /etc/profile
在path一栏,加入:/opt/hbase/bin
最后一栏加入export HBASE_CONF_DIR=/opt/hbase/conf/
这样每次进入docker容器,就不用再敲export HBASE_CONF_DIR命令。
ps:经过上述的降级处理,HBase的性能大打折扣,通过JVM调优以及HBase调优和Phoenix参数调优,都效果欠佳,也许技术水平比较低,没有调优成功。所以建议降级到HBase 2.0.0和Phoenix 5.0.0
docker yaml文件如下:
hbase:
image: boostport/hbase-phoenix-all-in-one:2.0.0-5.0.0
container_name: hbase2
volumes:
- /opt/hbase2/data:/tmp
ports:
- 2182:2181
- 8766:8765