前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >flink(13)-flink on yarn源代码分析

flink(13)-flink on yarn源代码分析

作者头像
yiduwangkai
发布2020-04-24 17:30:13
1.4K0
发布2020-04-24 17:30:13
举报
文章被收录于专栏:大数据进阶大数据进阶

session cluster和per job 因为是源码分析,所以会分为服务端和客户端两个部分的代码分析,下面我先看服务端<br/>

session cluster模式是类似standalone,先去向yarn申请好资源,然后供业务方提交,主要的入口类是YarnSessionClusterEntrypoint(这里指的是服务端的入口)

从上图可以看出来,startCluster()方法前后是两个分界线,startCluster之前是获取配置,之后是进行集群相关的创建,包括haService/blobServer/heartBeatService/resourceManger/webMonitorEndpoint。<br/>

这里有一点是需要说明的是有关executionGraphStore, 这里实际有两种,

1.将可执行图放在内存中,

2.将可执行图持久化到文件。<br/>

yarn session:将executionGraph持久化到文件<br/>

per job:将executionGraph持久化到文件<br/>

对于per job模式是每个任务对应一个集群,其实就是将上图中的YarnSessionClusterEntrypoint改成YarnJobClusterEntrypoint,其它流程基本一致(除去executionGrap的存储)。<br/>

下面来看一下两个主类的继承关系图<br/>

<br/>

从图上可以看到主要的区别就是createSerializeableExecutionGraphStore方法,也就是executionGraph的存储位置不同。<br/>

session client和per job 由于flink不同的版本代码变动较大,所以在这里需要区分flink的版本进行一下说明 flink1.9之前的基本一致,提交至yarn的主要流程都在CliFrontend和FlinkYarnSessionCli中, 我们来看一下主要流程<br/>

yarn client
yarn client

<br/>

这里session和per job的在流程上的最大区别就是clusterId是否为空 flink1.9之后进行了流程统一,抽象出了一个PipelineExecutor接口,统筹所有的提交,不过在看继承关系之前还是先看一下yarn-client的提交流程其实主要入口还是CLiFrontened,不过在加载完配置文件之后就直接反射调用invokeInteractiveModeForExecution,这个类会调用用户的main函数,加载完用户业务代码之后,会去走正常的提交流程。 到这里已经将所有的提交流程都说完了,大家对于flink争个提交流程应该有了更加清晰的认识。<br/>

最后在来说一下flink submit的接口,这是在flink-1.10才出现的一个新的统一,流程图如下<br/>

flink submit
flink submit

<br/>

从上图可以看出来,AbstractSessionClusterExecutor中的主要调用逻辑其实和上面我们已经看到的session cluster的提交流程是一致的,只不过代码更加的抽象,这样其实扩展性也更加好,AbstractJobClusterExecutor主要主要就是为了向已有集群提交任务的,LocalExecutor其实是为了用户本地调试所用

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
大数据
全栈大数据产品,面向海量数据场景,帮助您 “智理无数,心中有数”!
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档