Skip to content

程序打包和分布式执行

译者:flink.sojb.cn

如前所述,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方法的类。

概要

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

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

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

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



回到顶部