Apache flink 运行Fink应用程序建议(当然在IDE之外)

Apache flink 运行Fink应用程序建议(当然在IDE之外),apache-flink,Apache Flink,我很乐意接受关于运行Flink应用程序的任何建议,因为这似乎有点像雷区。我在这里说的是Linux(Centos 7 dist),因为我甚至不想分享Windows给我带来的问题 从命令行运行只是一个长期的灾难,它似乎永远不会运行。最初,我尝试通过maven使用jar的lib文件夹和属性文件的config文件夹等来“正确”地完成它,这是一场灾难,因为它永远找不到任何东西(当通过java-jar启动时)。然后,我尝试了maven shade插件来获得一个uber jar(从任何意义上说它都是uber)

我很乐意接受关于运行Flink应用程序的任何建议,因为这似乎有点像雷区。我在这里说的是Linux(Centos 7 dist),因为我甚至不想分享Windows给我带来的问题

从命令行运行只是一个长期的灾难,它似乎永远不会运行。最初,我尝试通过maven使用jar的lib文件夹和属性文件的config文件夹等来“正确”地完成它,这是一场灾难,因为它永远找不到任何东西(当通过java-jar启动时)。然后,我尝试了maven shade插件来获得一个uber jar(从任何意义上说它都是uber)——但他死了,Flink也找不到自己的参数工具依赖性。(另外,请注意,如果您使用-Dlog4j.configuration.file,上面的任何一个都可能不太在意,因为它只是完全忽略它)。因此,我们放弃了与java-jar anApp.jar有关的任何东西 接下来,我们尝试通过web界面提交它。这至少显示了希望(即确实找到了ParameterTool),但它很快就会消失得很快。似乎上传将它(并在失败时将其删除,因此很难真正说出)放入/tmp目录,从那里,我的应用程序需要的任何配置类或支持类都是看不见的,因为Flink从未找到它们。因此它崩溃了(并导致web应用程序崩溃,因此我必须从头开始重新加载uber jar并重新设置所有命令行选项。(好的一面是,我不需要输入-Dlog4j参数,因为这里也忽略了它)

欢迎任何建议

(通过java-jar启动时…)

这是一面很大的红旗

与在IDE中运行作业(您只运行类的主方法)不同,要在IDE之外运行作业,必须将其提交到Flink群集。原因是在IDE中,为方便起见,执行作业时会自动启动群集,但在IDE之外,您通常希望重用现有群集。

鉴于您能够访问web界面,我假设您已经使用
/bin/start cluster.sh
/bin/start local.sh
启动了flink。如果没有,现在是最好的时机

要提交作业,请运行
/bin/flink run
。应用程序所需的任何库(尚未包含在jar中)都必须放在flink发行版的
/lib
目录中

请注意,我建议您首先提交捆绑的wordcount示例(/examples/batch/wordcount.jar),这样您就不必马上处理依赖关系

(通过java-jar启动时…)

这是一面很大的红旗

与在IDE中运行作业(您只运行类的主方法)不同,要在IDE之外运行作业,必须将其提交到Flink群集。原因是在IDE中,为方便起见,执行作业时会自动启动群集,但在IDE之外,您通常希望重用现有群集。

鉴于您能够访问web界面,我假设您已经使用
/bin/start cluster.sh
/bin/start local.sh
启动了flink。如果没有,现在是最好的时机

要提交作业,请运行
/bin/flink run
。应用程序所需的任何库(尚未包含在jar中)都必须放在flink发行版的
/lib
目录中


请注意,我建议您首先提交捆绑的wordcount示例(/examples/batch/wordcount.jar),这样您就不必马上处理依赖关系谢谢你的支持。确实完全放弃了java-jar。通过在集群上进行某种欺骗,取得了显著的进步,尽管仍然不理想。基本上,添加了一个命令行参数(可在web界面上获得)这使我能够通过ParameterTool硬连接要获取的属性文件的位置。然后,此配置文件将包含支持资源的位置,以便应用程序能够愉快地运行。不过,我不得不在应用程序中添加一些额外的代码,以确定它是在windows还是Linux上,这样它就无法运行然后从配置文件中选择硬编码位置的正确格式。当然,理想的情况是,当我首先将文件放在/src/main/resources中时,我认为Flink可以在任何一个平台上自己找到它们(或者至少按照java的正常方式找到它们),但事实并非如此。硬编码(至少是通过属性文件可配置的硬位置)现在就可以了。

谢谢你的帮助。确实完全放弃了java-jar。通过在集群上进行某种欺骗,取得了显著的进步,尽管仍然不理想。基本上,添加了一个命令行参数(可在web界面上获得)这使我能够通过ParameterTool硬连接要获取的属性文件的位置。然后,此配置文件将包含支持资源的位置,以便应用程序能够愉快地运行。不过,我不得不在应用程序中添加一些额外的代码,以确定它是在windows还是Linux上,这样它就无法运行然后从配置文件中选择硬编码位置的正确格式。当然,理想的情况是,当我首先将文件放在/src/main/resources中时,我认为Flink可以在任何一个平台上自己找到它们(或者至少按照java的正常方式找到它们),但事实并非如此。硬编码(至少是通过属性文件可配置的硬位置)现在就可以了。

在1.3.3和1.4中,您可以像这样将属性文件加载到ParameterTool中:
ParameterTool pt=ParameterTool.fromPropertiesFile(MyApplication.class.getResourceAsStrea