一、概述

用户通过 DataStream API 构建 Flink 应用程序之后,下一步就是将构建好的 jar 包提交到集群中运行,整个过程涉及客户端和集群运行时之间的交互。
Flink 的作业提交方式主要分为两种类型:

  1. 直接运行在本地 JVM 的伪分布式模式,即通过在JVM 进程内构建 Mini 版的分布式集群运行环境,直接将作业代码提交到 MiniCluster 中运行

  2. 将作业通过独立的客户端提交到分布式集群运行时运行。

主要包含 CLI 命令行、Scala Shell客户端、WebRestful API、 Python API 等方式。基于独立客户端实现的
不同提交方式底层都是在 flink-client 模块之上进行封装。

二、基于 CLI 命令行

基于 CLI 命令行方式提交作业的整体流程:

1
${FLINK_HOME}/bin/flink run application.jar

2.1. 流程概述

  1. 用户编写和生成 Application.jar 应用程序。
  2. 执行 bin/flink run 命令,启动和初始化 CLIFrontend 客户端的 main 程序。
  3. 将应用程序的 jar 包提交到 CLIFrontend

2.2. 创建和初始化 CLIFrontend

这些参数初始化命令解析工具 CustomCommandLine。
方法执行 CLIFrontend 应用程序。CLIFrontend 会从fLink-conf.yamL 中加载集群环境默认参数,然后根据 当用户指定 bin/flink run appLication. jar’ 命令启动应用程序时,会调用 CLFrontend 中的 main0)

2.3. PackagedProgram 构造

PackagedProgrem 结构包含应用程序能够运行的全部信息,如 jar 文件、任务参数、mainClass 等。基于PackagedProgram 可以打包用户提交的作业,构建作业执行的本地环境,主要是将该作业的依赖包加载至
UserClassLoader 中。通过 PackagedProgram 在客户端进程内运行作业代码逻辑,并从作业中将 JobGraph 信息抽取出来,最后将 JobGraph 提交到集群中运行。

用户提交的应用程序就运行在客户端进程中了。整个过程进及參数的解析、PackagedProgram的生成和执行、
ContextEnvironment 的创建和初始化。
ContextEnvironment 主要用于创建应用程序使用的 ExecutionEnvironmer