繁体   English   中英

Apache Flink - org.apache.flink.client.program.ProgramInvocationException

[英]Apache Flink - org.apache.flink.client.program.ProgramInvocationException

我使用 Scala 2.11.7 创建了一个带有 Apache FLink 1.0.3 的应用程序,我想在本地测试它(单个 jvm)。 所以我按照网站上的说明做了以下事情:

./bin/start-local.sh
tail log/flink-*-jobmanager-*.log

它开始得很好,我可以在 localhost:8081 看到 Web 界面。 然后,我尝试提交我的申请,但我收到了异常或奇怪的消息。 例如,当我键入以下任一命令时:

./bin/flink run ./myApp.jar
./bin/flink run ./myApp.jar -c MyMain
./bin/flink run ./myApp.jar -c myMain.class
./bin/flink run ./myApp.jar -c myMain.scala
./bin/flink run ./myApp.jar -c my.package.myMain
./bin/flink run ./myApp.jar -c my.package.myMain.class
./bin/flink run ./myApp.jar -c my.package.myMain.scala

我收到以下异常:

------------------------------------------------------------
 The program finished with the following exception:

org.apache.flink.client.program.ProgramInvocationException: Neither a 'Main-Class', nor a 'program-class' entry was found in the jar file.
    at org.apache.flink.client.program.PackagedProgram.getEntryPointClassNameFromJar(PackagedProgram.java:571)
    at org.apache.flink.client.program.PackagedProgram.<init>(PackagedProgram.java:188)
    at org.apache.flink.client.program.PackagedProgram.<init>(PackagedProgram.java:126)
    at org.apache.flink.client.CliFrontend.buildProgram(CliFrontend.java:922)
    at org.apache.flink.client.CliFrontend.run(CliFrontend.java:301)
    at org.apache.flink.client.CliFrontend.parseParameters(CliFrontend.java:1192)
    at org.apache.flink.client.CliFrontend.main(CliFrontend.java:1243)

当我输入以下任一命令时:

./bin/flink run ./ -c myMain myApp.jar
./bin/flink run ./ -c myMain.class myApp.jar
./bin/flink run ./ -c myMain.scala myApp.jar
./bin/flink run ./ -c my.package.myMain myApp.jar
./bin/flink run ./ -c my.package.myMain.class myApp.jar
./bin/flink run ./ -c my.package.myMain.scala myApp.jar

我收到以下错误:

JAR file is not a file: .

Use the help option (-h or --help) to get help on the command.

上述命令不适用于 -c 或 --class。 我使用 IntelliJ 并使用依赖项中的构建模块选项编译应用程序。 我做错了什么?

提交 JAR 的正确方法是:

bin/flink run -c my.package.myMain myApp.jar

您必须在 JAR 文件之前指定参数(如-c )。 您最初收到错误消息,因为./被解释为 JAR 并且该行的其余部分被忽略。

-p参数是可选的。 您的最后一个示例有效,因为参数顺序是正确的,而不是因为并行标志。

我想出了什么问题。 Flink 需要将并行度作为参数传递,否则会出现程序调用异常。 下面的命令对我有用:

./bin/flink run -p2 --class myMain myApp.jar

你必须在你的 pom 文件中提到入口点类。 请参阅 pom 文件片段中的以下部分

 <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> <mainClass>com.xyz.myMain</mainClass> </transformer> </transformers>

请检查以下代码段。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM