Отправить работу в удаленный кластер Hazelcast

Я новичок в Hazelcast Jet и у меня очень простой вопрос. У меня настроен 3-х узловый кластер JET. У меня есть пример кода для чтения из Кафки и слив в 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.

Не могли бы вы, пожалуйста, дайте мне знать, где я иду не так?

2 ответа

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

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

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

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

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

Пожалуйста, смотрите http://docs.hazelcast.org/docs/jet/0.6.1/manual/

Другие вопросы по тегам