hazelcast - 使用 MapStore 的 HazelCast 和 DB2 集成
问题描述
我正在尝试通过执行存储过程,使用 MapStore(和 MapLoader)将数据从 DB2 加载到 HazelCast。我能够从 DB2 中检索数据,但是当它尝试将数据加载到 HazelCast 时,我收到以下异常
java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: MapLoader 加载的项目属于 com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:69) 的不同分区at com.hazelcast.util.executor.CachedExecutorServiceDelegate$Worker.run(CachedExecutorServiceDelegate.java:227) at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source) at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source ) 在 java.lang.Thread.run(Unknown Source) 在 com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64) 在 com.hazelcast.util.executor.HazelcastManagedThread.run(HazelcastManagedThread.java:80 ) 引起:java.util.concurrent.ExecutionException: java.lang。IllegalStateException:MapLoader 加载的项目属于 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:92) 的不同分区在 com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java :162) com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader.loadValuesInternal(BasicRecordStoreLoader.java:141) com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader.access$100(BasicRecordStoreLoader.java:52) com.hazelcast .map.impl.recordstore.BasicRecordStoreLoader$GivenKeysLoaderTask.call(BasicRecordStoreLoader.java:109) at com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:67) ... 6 更多原因:java.lang。非法状态异常:MapLoader 加载的项目属于 com.hazelcast.map.impl.recordstore.DefaultRecordStore.isKeyAndValueLoadable(DefaultRecordStore.java:1031) 的不同分区,位于 com.hazelcast.map.impl.recordstore.DefaultRecordStore.putFromLoadInternal(DefaultRecordStore.java:987) ) 在 com.hazelcast.map.impl.operation.PutFromLoadAllOperation.run(PutFromLoadAllOperation.java:74) 在 com.hazelcast.spi 的 com.hazelcast.map.impl.recordstore.DefaultRecordStore.putFromLoad(DefaultRecordStore.java:978)。 Operation.call(Operation.java:148) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:202) 在 com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run( OperationRunnerImpl.java:191) 在 com.hazelcast.spi.impl.operationexecutor.impl.OperationThread。process(OperationThread.java:120) at com.hazelcast.spi.impl.operationexecutor.impl.OperationThread.run(OperationThread.java:100) at ------ 从 ------ 提交。(未知来源) 在 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolve(InvocationFuture.java:127) 在 com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:79) ...还有 11 个
如果有人通过执行“存储过程”将 HazelCast 和 DB2 与 MapStore 集成。
谢谢,拉姆
解决方案
@katteriamma,问题是PutFromLoadAllOperation
操作。方法的签名loadAll
是Map<K,V> loadAll(Collection<K> keys)
.
在您的情况下发生的是您的loadAll
方法返回不属于调用方分区的额外键值对。您需要确保只返回 的键值映射Collection<K> keys
,仅此而已。loadAll
无论如何都会为每个分区调用方法。所以你需要确保你的存储过程只返回给定键的数据,或者你需要过滤额外的键值对。
推荐阅读
- kubernetes - 在 Kubernetes 集群中添加第二个主节点的最佳方法是什么?
- python - 如何找到与一个变量中的最大值相对应的所有变量的最大值?
- mysql - mysql - 如何获取一列与另一列匹配的索引
- ruby-on-rails - 从 Excel 中的 ActiveRecord 单引号导出 Ruby CSV 看起来很奇怪
- ios - 如果单击 UISearchBar,则更改 UITableView 位置:[使用 ModernSearchBar]
- javascript - 获取标签的 href 属性
- javascript - Nodejs 异步承诺队列
- css - 单击[Bootstrap 4]时如何更改按钮的蓝色轮廓颜色
- image - 为什么 Markdown 相关图像不在 Github 上渲染?
- python - setup.py dependency_links 未搜索 install_requires