Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

0 简介

Yarn-per-job模式提交流程 总图
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

1 程序起点

1)flinkinflink
    => exec  $JAVA_RUN  $JVM_ARGS  "${log_setting[@]}"  -classpath  "`manglePathList "$CC_CLASSPATH:$INTERNAL_HADOOP_CLASSPATHS"`"
org.apache.flink.client.cli.CliFrontend "$@"
2)flink/bin/config.sh(相关环境配置都在这里)
  => JAVA_RUN=java
  => JVM_ARGS=""  => # Use conf/flink-conf.yaml
  =>INTERNAL_HADOOP_CLASSPATHS="${HADOOP_CLASSPATH}:${HADOOP_CONF_DIR}:${YARN_CONF_DIR}"
3)执行 java -cp 就会开启 JVM 虚拟机,在虚拟机上开启 CliFrontend 进程,然后开始执行main 方法
  说明:java -cp 和 -classpath 一样,是指定类运行所依赖其他类的路径。
  java -cp =》开启 JVM 虚拟机 =》开启 Process(CliFrontend)=》程序入口 CliFrontend.main
4)Flink 提交任务的入口类为 CliFrontend。找到这个类的 main 方法:
  在 IDEA 中全局查找(ctrl + n):org.apache.flink.client.cli.CliFrontend,找到 CliFrontend类,并找到 main 方法
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

2 创建 Yarn 客户端应用程序

2.1 程序入口

CliFrontend.java 
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

2.2 解析输入参数

CliFrontend.java 
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

DefaultParser.java
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序
DefaultParser.java 
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

各种情况的解析,逻辑大体相同:去除-或--前缀,校验参数,以其中一个为例
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序
Options.java:
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

 Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序

DefaultParser.java
Flink 源码(四):Flink 环境准备及提交流程(一)程序起点与创建 Yarn 客户端应用程序