通过前面的文章了解到

Driver将用户代码转换成streamGraph再转换成Jobgraph后向Jobmanager端提交

JobManager启动以后会在Dispatcher.java起来RPC方法submitJob(jobGraph),用于接收来自Driver转化得到的JobGraph来启动任务

具体来看jobGraph提交到JobManager的submitJob方法

前面都是一些调用链没有什么好讲的,最后到createJobManager( )方法这里

先看一下1,创建了一个jobmanagerRunner并且将中Driver端得到的JobGraph传递了进去

在创建JobManagerRunner的过程中它调用了

这里主要是为了创建一个jobMaster,在jobMaster的构造方法中

在这里它先是create传入了jobgraph然后又通过createAndRestoreExecutionGraph()方法转换得到executionGraph

这个executionGraph就可以用来调度启动任务了

具体看一下他的转化逻辑

可以看到它从createExecutionGraph方法中得到了executionGraph

并且通过getCheckpointCoordinator()方法得到了一个coordinator(主要是用于周期性触发checkpoint,调用对应TaskManager的rpc生成barriers往下游发送)

继续看一下他的转化逻辑

在createExecutionGraph中通过ExecutionGraphBuilder.buildGraph()返回了一个executionGraph

在buildGraph()方法中

创建了一个executionGraph

为executionGraph设置一些基础信息,包括调度方式等(这里stream是eager的调度方法)

然后

1处得到了一个的拓扑图包含了所有jobGraph的所有jobVertex节点

2处就是具体遍历所有jobGraph的jobVertex生成executionGraph的顶点ExecutionJobVertex

遍历所有jobGraph的顶点jobVertex

在这里就具体生成了ExecutionJobVertex中的每一个ExecutionVertex[] taskVertices

当然这里还会配置很多ExecutionGraph的信息,就不一一列举了

配置了一些ExecutionGraph的属性以后

调用了

可以看到我的注释,就是说这个地方其实是和coordinator的创建有关,在这个方法中

创建了一个coordinator对象

在这里注册了一个JobStatus的监听

来看一下这个监听的作用

可以看到源码上的注解就是说用于监听job状态的改变,具体监听

看到这里就非常明显了

当监听到jobstutes的状态改变时

当jobstatus变成Running时调用了coordinator的.startCheckpointScheduler()方法其中

这里可以看到创建了一个周期的调度线程

看下线程的run方法

这里就真相大白了,调用了triggerCheckpoint方法触发一次checkpoint(触发checkpoint的逻辑以后随缘更新到再讲)

注意,前面说到只是注册了一个监听,也就是说这个coordinator现在其实还没有启动起来的!!要到监听到jobStatus变成running才会启动

回到最开始的这里

1处转化成executionGraph以后

2处具体看一下这个startJobManagerRunner()方法

把jobManager启动了起来

在其中

启动了这个jobMasterService

在这里开启了jobmaster的一些RPC,像什么cancel job的stop job 的还有register TM的

然后startJobExecution()方法中

这里其实会向jobManager中启动的resourceManager的RPC请求solt信息初始化自己的的soltPool这里不细讲了,我还没有研究

后面

这个地方就是修改job状态和调度运行了

其中调用了scheduleExecutionGraph(),在其中又调用了

这个地方比较重要,在其中先

\

这里它就通过CAS修改了jobStatue从Created变成了Running

修改完了以后还没完,还通过这个方法notifyJobStatusChange(),这个方法里面具体看一看

他遍历了所有的listener,也就是说会触发我们前面注册的那个coordinator的监听监听到job状态改变为running

这里coordinator就启动完成了

继续往下,在修改完job状态以后

因为流模式这里是用的EAGER,flink批处理我不熟这里就不展开了

在这个schduleEager方法中

然后

看到这里它创建了一个TaskDeploymentDescriptor一个用于调度TaskManager端任务的tdd对象

看过前面几篇博客的同学,就应该有印象了,在TaskManager启动会启动很多的RPC接口

其中有一个

一目了然了,这个东西是用来发送给TaskManager用于启动TaskManager端任务的!!!!

到这里jobManager端的job启动任务就差不多完成了

接下来就是TaskManager端的任务了,随缘更新的时候在说一下真正TaskManager节点是如何启动我们job任务的

Flink的Job启动JobManager端(源码分析)的更多相关文章

  1. Flink的Job启动TaskManager端(源码分析)

    前面说到了  Flink的JobManager启动(源码分析)  启动了TaskManager 然后  Flink的Job启动JobManager端(源码分析)  说到JobManager会将转化得到 ...

  2. Flink的Job启动Driver端(源码分析)

    整个Flink的Job启动是通过在Driver端通过用户的Envirement的execute()方法将用户的算子转化成StreamGraph,然后得到JobGraph通过远程RPC将这个JobGra ...

  3. Flink中Idle停滞流机制(源码分析)

    前几天在社区群上,有人问了一个问题 既然上游最小水印会决定窗口触发,那如果我上游其中一条流突然没有了数据,我的窗口还会继续触发吗? 看到这个问题,我蒙了???? 对哈,因为我是选择上游所有流中水印最小 ...

  4. Android Activity Deeplink启动来源获取源码分析

    一.前言 目前有很多的业务模块提供了Deeplink服务,Deeplink简单来说就是对外部应用提供入口. 针对不同的跳入类型,app可能会选择提供不一致的服务,这个时候就需要对外部跳入的应用进行区分 ...

  5. Netty服务端启动过程相关源码分析

    1.Netty 是怎么创建服务端Channel的呢? 我们在使用ServerBootstrap.bind(端口)方法时,最终调用其父类AbstractBootstrap中的doBind方法,相关源码如 ...

  6. Flink中异步AsyncIO的实现 (源码分析)

    先上张图整体了解Flink中的异步io 阿里贡献给flink的,优点就不说了嘛,官网上都有,就是写库不会柱塞性能更好 然后来看一下, Flink 中异步io主要分为两种 一种是有序Ordered 一种 ...

  7. Flink中的CEP复杂事件处理 (源码分析)

    其实CEP复杂事件处理,简单来说你可以用通过类似正则表达式的方式去表示你的逻辑,表现能力非常的强,用过的人都知道 开篇先偷一张图,整体了解Flink中的CEP中的  一种重要的图  NFA非确定有限状 ...

  8. Flink 中LatencyMarks延迟监控(源码分析)

    流式计算中处理延迟是一个非常重要的监控metric flink中通过开启配置   metrics.latency.interval  来开启latency后就可以在metric中看到askManage ...

  9. spring mvc 启动过程及源码分析

    由于公司开源框架选用的spring+spring mvc + mybatis.使用这些框架,网上都有现成的案例:需要那些配置文件.每种类型的配置文件的节点该如何书写等等.如果只是需要项目能够跑起来,只 ...

随机推荐

  1. [leetcode] 392. Is Subsequence (Medium)

    原题 判断子序列 /** * @param {string} s * @param {string} t * @return {boolean} */ var isSubsequence = func ...

  2. python函数基础-参数-返回值-注释-01

    什么是函数 函数就是有特定功能的工具 # python中有内置函数(python解释器预先封装好的)与自定义函数(用户自定义封装的)之分 为什么要用函数 # 可以减少代码冗余,增加代码复用性 # 使代 ...

  3. 解决Windows10下安装Ubuntu16.04双系统后开机没有Ubuntu引导

    转载 https://blog.csdn.net/qq_27838307/article/details/79149791 1.按照网上教程在磁盘中压缩硬盘并且不需要给他新建卷标,就让他显示空闲就好了 ...

  4. 《VR入门系列教程》之14---面向大众的Unity3D

    大众化的游戏引擎--Unity3D     并不是所有VR应用都是游戏,然而现在做VR开发的几乎都会用专业游戏引擎来做,因为游戏引擎既满足了一个引擎的要求又可以方便地制作出高品质的VR应用.一个游戏引 ...

  5. PHP对接口执行效率慢的优化

    PHP对接口执行效率慢的优化 PHP对接口执行效率慢的优化 造成执行效率低的原因可以由很多方面找原因 从代码层面,代码质量低,执行效率也会有很大影响的. 从硬件方面,服务器配置低,服务器配置是基础,这 ...

  6. Flink实战(八) - Streaming Connectors 编程

    1 概览 1.1 预定义的源和接收器 Flink内置了一些基本数据源和接收器,并且始终可用.该预定义的数据源包括文件,目录和插socket,并从集合和迭代器摄取数据.该预定义的数据接收器支持写入文件和 ...

  7. 洛谷 P3811 题解

    题面 利用暴力快速幂O(nlogn)会TLE掉: 所以对于求1~n的所有逆元要用递推公式: #include <bits/stdc++.h> using namespace std; ]; ...

  8. 【iOS】copy 关键字

    以前没注意过 iOS 的 copy, nonatomic, assign, weak, strong 等关键字. 偏偏今天遇到了一个问题,恰恰是关键字的问题,如图: 之前用的是 assign, 没有用 ...

  9. Windows 下配置 Vagrant 环境

    Vagrant是一个基于 Ruby 的工具,用于创建和部署虚拟化开发环境.它使用 Oracle 的开源VirtualBox虚拟化系统. Vagrant 在快速搭建开发环境方面是很赞的,试想一个团队中, ...

  10. linux CPU100%异常排查

    1.top查找出占CPU比例最高的进程(5881): 2.查看该进程正在执行的线程: top -H -p  5881 3.将线程转换成16进制 printf ‘%x\n’ 5950 4.查看异常线程执 ...