отправить задание в удаленный кластер hazelcast

Я новичок в Hazelcast Jet и у меня очень простой вопрос. У меня настроен 3-узловой JET-кластер. У меня есть образец кода для чтения из Kafka и слива в IMap. Когда я запускаю его из командной строки (используя jet-submit.sh и использую JetBootstrap.getInstance() для получения экземпляра клиента JET), он работает отлично. Когда я запускаю тот же код (используя Jet.newJetClient() для получения экземпляра и запуска от имени -> Java-приложения в Eclipse), я получаю:

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

Не могли бы вы сообщить мне, в чем я ошибаюсь?


person Aparna Venkataramani    schedule 03.07.2018    source источник


Ответы (2)


Одна из ваших лямбда-функций захватывает внешнюю переменную, вероятно, определенную на уровне класса, и этот класс не является сериализуемым или не добавляется в конфигурацию задания при отправке с клиента. Это делается автоматически при отправке через скрипт.

См. http://docs.hazelcast.org/docs/jet/0.6.1/manual/#remember-that-a-jet-job-is-distributed

person Gokhan Oner    schedule 03.07.2018

Когда вы используете экземпляр клиента для отправки задания, вы должны добавить все классы, содержащие код, вызываемый заданием, в JobConfig:

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

Например, если вы используете лямбда для stage.map(), необходимо добавить класс, содержащий лямбда.

Сценарий jet-submit.sh упрощает это, автоматически добавляя весь отправленный .jar файл.

person Oliv    schedule 04.07.2018