程序打包和分布式执行

如前所述,Flink程序可以使用a在集群上执行remote environment或者,可以将程序打包到JAR文件(Java Archives)中以供执行。打包程序是通过命令行界面执行它们的先决条件

打包程序

要通过命令行或Web界面支持从打包的JAR文件执行,程序必须使用通过其获取的环境StreamExecutionEnvironment.getExecutionEnvironment()当JAR提交到命令行或Web界面时,此环境将充当集群的环境。如果通过这些接口调用Flink程序的方式不同,则环境将像本地环境一样运行。

要打包程序,只需将所有涉及的类导出为JAR文件即可。JAR文件的清单必须指向包含程序入口点的类(具有public main方法的类)。最简单的方法是将main-class条目放入清单(例如main-class: org.apache.flinkexample.MyProgram)。主类属性是通过命令执行JAR文件时所使用的Java虚拟机发现的主要方法相同的一个java -jar pathToTheJarFile大多数IDE都提供在导出JAR文件时自动包含该属性。

通过计划打包程序

此外,我们支持打包程序作为计划execute()计划打包不是在主方法中定义程序并调用环境,而是返回程序计划程序计划是程序数据流的描述。为此,程序必须实现org.apache.flink.api.common.Program接口,定义getPlan(String…)方法。传递给该方法的字符串是命令行参数。可以通过该ExecutionEnvironment#createProgramPlan()方法从环境创建程序的计划打包程序的计划时,JAR清单必须指向实现org.apache.flink.api.common.Program接口的类,而不是使用main方法的类。

概要

调用打包程序的整个过程如下:

  • 搜索JAR的清单以查找主类程序类属性。如果找到这两个属性,则program-class属性优先于main-class属性。对于JAR清单既不包含属性的情况,命令行和Web界面都支持手动传递入口点类名的参数。

  • 如果入口点类实现了org.apache.flink.api.common.Program,则系统调用该getPlan(String…)方法以获取要执行的程序计划。

  • 如果入口点类没有实现org.apache.flink.api.common.Program接口,系统将调用该类的main方法。