将作业提交到远程hazelcast群集

时间:2018-07-03 17:12:02

标签: hazelcast-jet

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

能否让我知道我要去哪里错了?

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

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

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

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

相关问题