背景:
执行flink时,我们几种执行模式,比如在IDE本地执行模式以及远程YARN执行的模式等,你是否有疑问,为什么他们可以共用相同的代码呢?其实这就涉及到main方法和execute方法的关系了
flink的main方法和execute方法的关系
flink的main方法其实主要目的是为了构造JobGraph图,这一步不论对于本地执行环境还是远程执行环境都是一样的,有区别的是创建的执行环境不一样:
创建本地执行环境:
StreamExecutionEnvironment.createLocalEnvironment()
创建远程执行环境:
StreamExecutionEnvironment.createRemoteEnvironment(
host, // 远程JobManager地址
port, //远程JobManager端口
"jar path" //应用代码类
)
也就是说不论是本地还是远程执行环境,main方法的第一个作用也就是构造JobGraph图是一样的,区别只在于构造完JobGraph之后,是提交到本地启动的JobManager线程执行还是提交到远程的JobManager进程执行
示意图如下: