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

时间:2017-12-11 15:51:56

标签: apache-flink

我很乐意接受有关运行Flink Applications的任何建议,因为它似乎是一个雷区。我在这里谈论Linux(Centos 7 dist)因为我甚至不想分享Windows抛出的问题。

从命令行运行只是一场长期灾难,它似乎永远不会运行。最初,我尝试通过maven“正确”使用jars的lib文件夹和属性文件的配置文件夹等,这是一场灾难,因为它永远不会找到任何东西(当通过java-jar启动时)。然后我尝试使用maven shade插件来获得一个超级jar(并且它确实在任何意义上都是超级的) - 但他死了以及Flink无法找到自己的参数工具依赖。 (另请注意,如果您使用-Dlog4j.configuration.file,则上述任何一个都可能会少关注,因为它完全忽略它)。因此,我们放弃了与java -jar anApp.jar有关的任何事情 继续,我们尝试通过Web界面提交它。这至少表明了承诺(即实际上找到了ParameterTool),但很快就会很快死掉。似乎上传将它(并将其删除,因此很难将其删除)放入/ tmp目录,并且从那里,我的应用程序需要的任何配置类或支持类都是不可见的,因为Flink从未找到它们。所以它崩溃了(并且带来了web应用程序,因此我必须从头开始重新加载超级jar并重新设置我的所有命令行选项。(好的一面,我不需要将我的-Dlog4j参数放入因为它在这里也被忽略了。)

欢迎任何建议......

2 个答案:

答案 0 :(得分:3)

  

(通过java-jar启动时)。

好吧,这就是一个大红旗。

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

鉴于您能够访问网络界面,我将假设您已使用/bin/start-cluster.sh/bin/start-local.sh启动了flink。如果没有,现在是完成它的最佳时机。

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

请注意,我建议首先提交捆绑的wordcount示例(/examples/batch/WordCount.jar),这样您就不必立即处理依赖项。 (让我们一次解决一个问题)

答案 1 :(得分:0)

感谢Ches。确实放弃了java -jar。通过在集群上作弊来管理以取得重大进展,尽管仍然不理想。基本上,添加了一个命令行参数(在Web界面上可用),允许我通过ParameterTool硬连接属性文件的位置。然后,此配置文件将包含支持资源的位置,以便应用程序可以愉快地运行。我确实需要在应用程序中添加一些额外的代码,以确定它是在Windows还是Linux上,以便它可以从配置文件中选择正确的硬编码位置格式。当然,理想情况下,当我把文件放在/ src / main / resources中时,我认为Flink会在任一平台上自己找到它们(或者至少按照java来发现它们正常)但是它不是。硬编码(至少它是通过属性文件至少是可配置的硬位置)现在可以做到。