如何实现mapUsingContext()/ filterUsingContext()-hazelcast-jet

时间:2018-06-22 16:16:33

标签: java hazelcast hazelcast-jet

我有以下几种情况可以理解我的问题。

  • 有一个外部节点(节点A),一个客户端应用程序(App1)和一个Hazelcast-Jet作业应用程序(节点B,App2)。
  • App1从FlatBuffers收集数据并将其包装在对象HzData中。 HzData是可实现DataSerializable的。
  • 然后将HzData放在IMAP中,就像IMAP称为hzMap。
  • 首先,我启动我的节点A,然后启动App1。 App1将hzMap放置在节点A中。
  • 然后,我运行App2,它依次启动,启动节点B并运行Jet Job。
  • 关于App2的一点信息,我在相同包名称下的App2中具有相同的HzData。我在JobConfig中添加了与作业相关的所有类。
  • 然后我的管道包含与此代码相似的内容。

BatchSource<Map.Entry<Integer, HzData>> dataBatchSource = Sources.map('hzMap'); BatchStage<HzData> dataBatchStage = pipe.drawFrom(dataBatchSource ). mapUsingContext(ContextFactories.replicatedMapContext ('hzMap'), (map, data) -> data.getValue()); dataBatchStage.drainTo(Sinks.logger()) 上面的引用可以很好地记录所有数据。如果我使用如下所示的过滤器,则会导致出现问题

dataBatchStage.filter(v -> v.getCheck() == 0).drainTo(Sinks.logger());

以上内容导致我出现类似

的错误

com.hazelcast.jet.JetException: Exception in ProcessorTasklet{filter#24}: java.lang.ClassCastException: com.nexus.api.portables.HzData cannot be cast to com.nexus.api.portables.HzData

该错误似乎是反序列化错误,但我想知道上面的记录器是如何工作的。

我也尝试使用filterUsingContext(),但仍然得到相同的结果。

先谢谢了。期待您的宝贵反馈和解决方案。

0 个答案:

没有答案