返回介绍

程序打包和分布式执行

发布于 2025-05-02 18:19:16 字数 1511 浏览 0 评论 0 收藏

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

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。