cli.parseParameters(args));// 解析参数+提交 ==> 然后进到parseParameters方法,执行到switch case ACTION_RUN 1 ==> run(params); ==> runProgram ==> 2 ==> if (isNewMode && clusterId == null && runOptions.getDetachedMode()) {//yarn per job -d模式 ... } else { if (clusterId != null) {//standalone -d模式 和 yarn-session模式 client = clusterDescriptor.retrieve(clusterId); shutdownHook = null; } else {//job有多部分组成 } } ==>我们一个个看,先看yarn per job模式 clusterDescriptor.deployJobCluster ==》 YarnClusterDescriptor.deployJobCluster() ==> AbstractYarnClusterDescriptor.deployInternal ==》 startAppMaster ==》yarnClient.submitApplication(appContext); 最后返回一个 ClusterClient<ApplicationId> ==> client关闭 ==>接着看stand-alone模式 clusterDescriptor.retrieve(clusterId); ===> StandaloneClusterDescriptor.retrieve 返回一个 RestClusterClient<StandaloneClusterId>类型的client ==>和yarn-session模式,yarn sesion模式 app已经启动,这里只需要通过 appid获取相关的appmaster 的 ip port ,返回一个ClusterClient<ApplicationId>类型的 client clusterDescriptor.retrieve(clusterId); ===> AbstractYarnClusterDescriptor.retrieve ===> createYarnClusterClient ===> return ClusterClient<ApplicationId> 3 ===> 接着往下看到 executeProgram(program, client, userParallelism); ===》 JobSubmissionResult result = client.run(program, parallelism); //此时是RestClusterClient 提交任务 ===》 prog.invokeInteractiveModeForExecution(); //反射调用 wordcount的main 函数 ===》 执行到DataSet.print 会触发 ExecutionEnvironment.execute()执行 ,实际调用的是ContextEnvironment.execute()方法 ===》调用ClusterClient.run方法,最后会调用RestClusterClient.submitJob()方法,将jobGraph 用rest请求提交到JobManager,至此客户端提交完成。
flink client提交
最新推荐文章于 2022-05-20 20:31:03 发布