Почему запуск примера приложения flink приводит к этой ошибке? - PullRequest
0 голосов
/ 30 марта 2020

Я пытаюсь запустить демонстрационное приложение, описанное в https://ci.apache.org/projects/flink/flink-docs-release-1.10/dev/projectsetup/java_api_quickstart.html.

Я сгенерировал проект с помощью данного сценария:

curl https://flink.apache.org/q/quickstart.sh | bash -s 1.10.0

и собрал с:

mvn clean package

Но когда я пытаюсь запустить с:

java -jar targets/java -jar quickstart-0.1.jar

, я получаю следующие ошибки:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/flink/streaming/api/environment/StreamExecutionEnvironment
        at org.myorg.quickstart.StreamingJob.main(StreamingJob.java:39)
Caused by: java.lang.ClassNotFoundException: org.apache.flink.streaming.api.environment.StreamExecutionEnvironment
        at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
        ... 1 more

у меня мигает в другой папке, и выполнил bin / start_cluster. sh. Мне также удалось без проблем запустить предварительно упакованные приложения flink (в / bin).

1 Ответ

2 голосов
/ 01 апреля 2020

По умолчанию, pom.xml, сгенерированный скриптом быстрого запуска, не будет включать зависимости Flink, которые необходимы для запуска jar напрямую через java -jar .... Чтобы запустить jar таким способом, вам нужно создать uber-jar, который включает все необходимые зависимости Flink. Это можно сделать, активировав профиль add-dependencies-for-IDEA:

mvn clean package -Padd-dependencies-for-IDEA

или изменив область действия зависимостей Flink с provided на compile.

Причина, по которой зависимости Flink не включены по умолчанию, потому что, когда вы отправляете задание в кластер Flink, этот кластер уже содержит эти зависимости. Следовательно, размер сгенерированного пользовательского jar можно сохранить небольшим, задав для зависимостей значение, указанное в pom.xml, что эквивалентно отсутствию их включения в jar.

...