0 简介
Yarn-per-job模式提交流程 总图

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 方法

2 创建 Yarn 客户端应用程序
2.1 程序入口
CliFrontend.java

2.2 解析输入参数
CliFrontend.java

DefaultParser.java

DefaultParser.java

各种情况的解析,逻辑大体相同:去除-或--前缀,校验参数,以其中一个为例

Options.java:

DefaultParser.java
