Flink的JobManager启动(源码分析)
都知道Flink中的角色分为Jobmanager,TaskManger
在启动脚本里面已经找到了jobmanager的启动类org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint(local模式更简单直接在Driver端的env.exection()直接启动了,有兴趣可以研究一下)
来看一下StandaloneSessionClusterEntrypoint启动类的一些重要的方法
在main方法中会调用抽象类 ClusterEntrypoint.java的
在这里启动了集群
在这个方法runCluster()中比较重要
其中1处初始化了一些ClusterEntrypoint.java中的一些服务像什么HA,blob,heartbeat,metricRegistry这些
还是主要看一下2处create()方法中
其中包括了一些创建以及启动ResourceManager(有用于请求solt的RPC,初始化所有solt到resourceManager的soltManager的RPC(这个会在jobmanager接收到jobGraph后调用),TM心跳等),启动web服务
来看一下ResourceManager的初始化
1处创建的services里面会包含一个soltManager但是里面并没有solt,solt并没有初始化
主要看下2处,创建了一个resourceManager对象这个抽象类实现了接口
这个接口下的几个重要的RPC方法具体实现
这里可以看到是具体向resourceManager请求solt的RPC,另外一个
这个RPC会发送信息到resourceManager包括像taskManagaer有多少可分配的solt,哪些已分配的solt,solt的状态等
然后在create()方法中就将这个resourceManager的PRC服务启动起来了
起来以后
主要看一下这里
创建了一个Dispatcher调度对象
看下Dispatcher是用来干嘛的(StandaloneDispatcher都是调用了父类的初始化方法super()创建一个Dispatcher.java对象)
来看一下Dispatcher实现了什么接口(ResourceManager同理)
看一下实现的这个接口,当然还有一些其他的
具体实现
看到这里就应该很熟悉了
他实现了submitJob()接口用于启动一个RPC,接受参数可以看到接受到一个JobGraph,这就意味着这和job任务启动有关,后面随缘更新到job启动Graph转换会提到
回到前面的Dispatcher.start()将传入的rpcService启动起来了,等待接受来自Driver端提交上来的JobGraph差不多启动完成了
这里jobmanager其实还不完整,负责一些服务没有起来,要等到Driver端的Jobgraph提交以后才会起来,像Coordinator后面随缘到job提交会详细的说一下