0

我是 Hazelcast Jet 的新手,有一个非常基本的问题。我设置了一个 3 节点 JET 集群。我有一个示例代码可以从 Kafka 读取并导出到 IMap。当我从命令行运行它(使用jet-submit.sh并使用JetBootstrap.getInstance()来获取 JET 客户端实例)时,它工作得非常好。当我运行相同的代码(Jet.newJetClient()用于获取实例并在 Eclipse 上运行 -> Java 应用程序)时,我得到:

java.lang.ClassCastException: cannot assign instance of java.lang.invoke.SerializedLambda to field com.hazelcast.jet.core.ProcessorMetaSupplier.

你能告诉我我哪里错了吗?

4

2 回答 2

0

当您使用客户端实例提交作业时,您必须将包含作业调用的代码的所有类添加到JobConfig

JobConfig config = new JobConfig();
config.addClass(...);
config.addJar(...);
...
client.newJob(pipeline, config);

例如,如果您使用 lambda stage.map(),则必须添加包含 lambda 的类。

jet-submit.sh脚本通过自动添加整个提交的.jar文件使这更容易。

于 2018-07-04T06:25:11.267 回答
0

您的 lambda 函数之一捕获一个外部变量,该变量可能在类级别定义,并且从客户端提交时该类不可序列化或未添加到作业配置中。这是通过脚本提交时自动完成的。

请参阅http://docs.hazelcast.org/docs/jet/0.6.1/manual/#remember-that-a-jet-job-is-distributed

于 2018-07-03T18:00:07.377 回答