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运行的主要内容,如果未能解决你的问题,请参考以下文章