【问题标题】:Why does running the example flink app throw this error?为什么运行示例 flink 应用程序会引发此错误?
【发布时间】:2020-04-01 17:55:32
【问题描述】:

我正在尝试运行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

我在另一个文件夹中有 flink,并且运行了 bin/start_cluster.sh。我还能够毫无问题地运行预打包的 flink 应用程序(在 /bin 中)。

【问题讨论】:

    标签: java linux apache-flink flink-streaming


    【解决方案1】:

    默认情况下,quickstarts 脚本生成的pom.xml 不包含直接通过java -jar ... 运行jar 所需的Flink 依赖项。为了以这种方式运行 jar,您需要构建一个 uber-jar,其中包含所有必需的 Flink 依赖项。你可以通过激活个人资料add-dependencies-for-IDEA来做到这一点:

    mvn clean package -Padd-dependencies-for-IDEA
    

    或者通过将 Flink 依赖的范围从 provided 更改为 compile

    之所以默认不包含 Flink 的依赖,是因为当你向一个 Flink 集群提交作业时,那么这个集群已经包含了这些依赖。因此,可以通过将依赖项设置为pom.xml中提供的方式来保持生成的用户jar的大小,这相当于不将它们包含在jar中。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多