IT教程 ·

Flink命令行提交job (源码剖析)

浅谈了解JDBC

这篇文章主要引见从敕令行到使命在Driver端运转的历程

经由过程flink run 敕令提交jar包运转程序

以yarn 形式提交使命敕令类似于: flink run -m yarn-cluster XXX.jar

先来看一下剧本中的挪用类

Flink命令行提交job (源码剖析) IT教程 第1张

在flink.sh剧本中能够看到提交的敕令走到了如许一个表面类上,用于提交job剖析用户敕令行参数

在其main要领中

Flink命令行提交job (源码剖析) IT教程 第2张

先会剖析对应须要的flink参数包含flink-conf-dir等,接着

Flink命令行提交job (源码剖析) IT教程 第3张

1处会依据是不是有hadoop权限平安掌握走对应的doas(),详细的实行逻辑为2处剖析对应的用户参数

Flink命令行提交job (源码剖析) IT教程 第4张

拿到参数后会先将参数中的第一个先取出来作为action

这里我们只看job提交的,剖析出来也就是run,然后将盈余的参数用于job运转

Flink命令行提交job (源码剖析) IT教程 第5张

在job运转前会先剖析盈余的参数,比方运转的jar文件地点,运转的主类名(没有背面归去Manifest内里找)作为entryPoint进口,并行度等参数

接着

Flink命令行提交job (源码剖析) IT教程 第6张

就用获得的这些参数构建program了,这里实在就是拿到了进口运转类的全额限命名,然后经由过程类加载器加载运转主类

Flink命令行提交job (源码剖析) IT教程 第7张

接着,会依据运转时用户的主类是不是为Program的完成类(用户能够直接返回plan)来设置对应的packageProgram的属性program是不是为空

Flink命令行提交job (源码剖析) IT教程 第8张

那我们通例的提交main要领主类的这里就是空的,如果是主类完成progarm的就反射实例化了一个今后赋给它

接着,就是运转而且提交使命了

Flink命令行提交job (源码剖析) IT教程 第9张 Flink命令行提交job (源码剖析) IT教程 第10张

这里比较主要,yarn形式提交的话这里会调理全部集群,提交罕见的非常

Couldn't deploy Yarn session cluster

就是从这个要领内里抛出的,与yarn有关

这里只看yarn的调理集群,由于standalone形式的话Jobmanager和TaskManager是已启动好的了不须要这里

个中走到了这个要领deployInternal()

Flink命令行提交job (源码剖析) IT教程 第11张

能够看到这里就是请求AppMaster而且传入了yarn形式启动集群的类的全额限命名,实在就是这个类

Flink命令行提交job (源码剖析) IT教程 第12张

用于启动jobmanager,和standalone 的进口类 

org.apache.flink.runtime.entrypoint.StandaloneSessionClusterEntrypoint  

功用差不多,然则另有有区分,当这个yarnsourceManager类请求到contain的时刻就会

Flink命令行提交job (源码剖析) IT教程 第13张

就会去起对应的taskManager了

回到最入手下手,当集群调理完今后

Flink命令行提交job (源码剖析) IT教程 第14张

运转用户程序

Flink命令行提交job (源码剖析) IT教程 第15张

 

实在就是挪用了用户的main要领,完毕

背面就是job往jobmanager提交了,前面的文章有

 

总结:

  经由过程一个表面类剖析用户参数,拿到类名

  调理集群启动请求AppMaster,Contaion起JM,TM

  然后类名经由过程类加载器加载类,然后反射实例挪用用户的main要领启动Job

 

Animate.css动画库,简单的使用,以及源码剖析

参与评论