首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >基于HazelCast和DB2的MapStore集成

基于HazelCast和DB2的MapStore集成
EN

Stack Overflow用户
提问于 2018-09-27 17:28:55
回答 2查看 980关注 0票数 0

我试图通过执行存储过程,使用DB2 (和MapLoader)将数据从MapStore加载到HazelCast。我能够从DB2检索数据,但是当它试图将数据加载到HazelCast时,我将得到以下异常

com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:69):java.util.concurrent.ExecutionException: java.util.concurrent.ExecutionException: java.lang.IllegalStateException: MapLoader加载的项目属于不同的分区:在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(未知来源)在com.hazelcast.util.executor.HazelcastManagedThread.executeRun(HazelcastManagedThread.java:64) at 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) at com.hazelcast.spi.impl.AbstractInvocationFuture.get(AbstractInvocationFuture.java的另一个分区:162)在com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader.loadValuesInternal(BasicRecordStoreLoader.java:141) at com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader.access$100(BasicRecordStoreLoader.java:52) at com.hazelcast.map.impl.recordstore.BasicRecordStoreLoader$GivenKeysLoaderTask.call(BasicRecordStoreLoader.java:109) at com.hazelcast.util.executor.CompletableFutureTask.run(CompletableFutureTask.java:67) .6更多的原因是: java.lang.IllegalStateException: 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.recordstore.DefaultRecordStore.putFromLoad(DefaultRecordStore.java:978)、com.hazelcast.map.impl.operation.PutFromLoadAllOperation.run(PutFromLoadAllOperation.java:74)、com.hazelcast.spi.Operation.call(Operation.java:148)的不同分区在com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.call(OperationRunnerImpl.java:202) at com.hazelcast.spi.impl.operationservice.impl.OperationRunnerImpl.run(OperationRunnerImpl.java:191) at 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) at com.hazelcast.spi.impl.operationservice.impl.InvocationFuture.resolveAndThrowIfException(InvocationFuture.java:79) . 11

如果有人通过执行“存储过程”与HazelCast和DB2集成MapStore。

谢谢你,拉姆

EN

回答 2

Stack Overflow用户

发布于 2018-09-28 16:53:13

@katteriamma,问题是PutFromLoadAllOperation操作。loadAll方法的签名是Map<K,V> loadAll(Collection<K> keys)

在这种情况下,您的loadAll方法将返回不属于调用方分区的额外键值对。您需要确保只返回Collection<K> keys的键值映射,仅此而已。无论如何,每个分区都将调用loadAll方法。因此,您需要确保存储过程只返回给定键的数据,或者需要筛选额外的键值对。

票数 3
EN

Stack Overflow用户

发布于 2019-11-27 05:47:20

我也面临着和你一样的问题。在我的示例中,loadAllKeys()返回了一组键,使用这些键-- loadAll()方法从数据存储将数据加载到映射中。loadAll()方法在将数据加载到映射中时操作原始键。因此,map.keySet()不等于loadAllKeys()。这导致了异常MapLoader loaded an item belongs to a different partition

为了解决这个问题,我确保map.keySet()的输出等于loadAllKeys()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52542258

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档