Flink作业提交(三)--- Job运行

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Flink作业提交(三)--- Job运行相关的知识,希望对你有一定的参考价值。

参考技术A 源码分析JobMaster如何run起来 介绍到了JobMaster.start方法,这个方法主要是启动rpc服务,并且运行job,接下来看下怎么run job?本文内容是基于Flink 1.9来讲解。

这里有两个重要的方法 startJobMasterServices(); 和 resetAndStartScheduler();  
这两个方法里涉及到的东西都比较多,分开来介绍。

2.1.1 startHeartbeatServices();

2.1.2 slotPool.start(getFencingToken(), getAddress(), getMainThreadExecutor());

2.1.3 scheduler.start(getMainThreadExecutor());

2.1.4 reconnectToResourceManager(new FlinkException("Starting JobMaster component."));

2.1.5 resourceManagerLeaderRetriever.start(new ResourceManagerLeaderListener());

该方法主要处理作业调度相关的工作,包括申请slot以及对Execution进行deploy。首先看下该方法源码

ExecutionGraph在构建的时候,通过ExecutionGraph成员变量列表可以看到,JobStatus默认是CREATED状态。因此resetAndStartScheduler方法首先走了if逻辑,然后是调用startScheduling,接下来看startScheduling方法逻辑。

会调用executionGraph.scheduleForExecution() --> SchedulingUtils.scheduleEager
重点看下SchedulingUtils.scheduleEager,这个方法主要做了两件事情

2.2.1 为每个 ExecutionVertex 申请slot
首先上源码,该源码在SchedulingUtils#scheduleEager方法中

底层真正申请slot的源码在SchedulerImpl#allocateSingleSlot方法中

slot申请流程总结如下:

2.2.2 deploy 所有的 Execution
当所有的ExecutionVertex节点申请到slot之后,就开始进行部署,首先看下源码,该源码在SchedulingUtils#scheduleEager方法中

deploy方法主要做了下面几件事情

至此,作业已经运行起来了

JobMaster启动作业,主要分成两个步骤

以上是关于Flink作业提交(三)--- Job运行的主要内容,如果未能解决你的问题,请参考以下文章

Flink运行时之客户端提交作业图-下

flink运行架构详解

flink作业提交源码解析-命令行解析及运行

flink作业提交源码解析-命令行解析及运行

flink作业提交源码解析-命令行解析及运行

flink:第二种模式:多个yarn session模式