将作业提交到远程 Hazelcast 群集



我是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.

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

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

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

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

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

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

jet-submit.sh脚本通过自动添加整个提交的.jar文件来简化此操作。

最新更新