отправить работу в удаленный кластер Hazelcast - PullRequest
0 голосов
/ 03 июля 2018

Я новичок в 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 ]

0 голосов
/ 04 июля 2018

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

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

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

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

0 голосов
/ 03 июля 2018

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

Пожалуйста, смотрите http://docs.hazelcast.org/docs/jet/0.6.1/manual/#remember-that-a-jet-job-is-distributed

...