首先会进入prestart方法体,对提交的作业图jobgraph进行存储,调用接口类SubmittedJobGraphStore 中的方法,
提名一个类:CliFrontend,其中的run方法对于提交的程序进行打包,之后交给ClusterClient类进行提交jar包
![](https://img.haomeiwen.com/i14354442/b0c7a2e437f72f5e.png)
之后还初始化一个ClusterClient类型的变量,对其赋值:
![](https://img.haomeiwen.com/i14354442/5c3b7b80a7e40470.png)
通过上述的run方法中的executeProgram将job提价Manager,可以跟踪这个方法进入executeProgram里面,看到如下的客户端执行语句:
![](https://img.haomeiwen.com/i14354442/e13f4083abc01fc5.png)
执行程序的结果进行返回
通过这个run方法,可以追踪到下图的run方法中,其中主要关注包含入口类的情况。该段方法就是为了根据是否为{@code setDetached(true)}或{@code setDetached(false)},以阻塞或分离模式从CliFrontend运行用户jar的通用方法。该方法返回值为run的一个同名方法,其中参数类型为:jobWithJars、并行度以及检查点SavepointSettings,继续跳转到该方法中,可以看到注释语句如下:
通过层层调用,可以看到run方法在flink客户端的集群上运行了用户的程序, 最后的run方法返回一个submitJob函数,将上述的Plan或者数据流图生成了一个job,
![](https://img.haomeiwen.com/i14354442/95047d12a909273f.png)
执行计划编译为job
submitJob是一个抽象方法,在分离模式下才有具体实现,具体实现如下:
@Override
protected JobSubmissionResult submitJob(JobGraph jobGraph, ClassLoader classLoader) throwsProgramInvocationException
{
if(isDetached())
{
returnsuper.runDetached(jobGraph, classLoader);
}
else{
returnsuper.run(jobGraph, classLoader);
}
}
作者:小C菜鸟
链接:https://www.jianshu.com/p/4a5017f20641
來源:简书
网友评论