Flink on Yarn
Flink提供了两种在yarn上运行的模式,分别为Session-Cluster和Per-Job-Cluster模式.
Application就是我们的JobManager.
什么是Session-Cluster呢?
就是多个job或者多个application共享一份集群资源,共享一份yarn session的进程或者共用一个进程中的资源,那个进程叫yarn session
什么是Per-Job-Cluster呢?
每一个job对应一个yarn session
如图:
Session-cluster 模式:(一个作业是失败很可能影响下一个作业的提交)
yarn session模式
一个作业的失败很可能会影响下一个作业的正常提交,因为他一个作业的失败很可能他把所有的资源都占完了,占完了而且你一直都没有停止,没有停止那么其他的作业就无法提交了
如图所示:
五个Flink Job都是跑在一个Flink的yarn session当中的,这个Flink yarn session可以理解为就是一份资源,这个资源从哪里生成来的呢?是从我们的yarn的ResourceManager中生成来的,生成过来之后他启动一个进程,这个进程我们把它称之为叫yarn session的进程,这个yarn session中包含了一些资源,这些资源允许我们的多个flink job共享这个里面的资源去运行;但是有这种情况,什么情况呢?
假设我提交两个flink job提交给这一个yarn session之后,发现我yarn session中的共享资源被占完了,就是满了.什么叫满了呢?就是没有空余的slot(因为我们flink的任务是运行在slot上面的),如图所示:
所以,如果我当前yarn session中运行了两个job之后已经没有剩余的slot了,请问后面五个flink job还能提交上去吗?不能,他们会在等待,等待有人释放了slot,然后他们在去抢这些资源======>这就是Session-cluster 模式
Per-Job-Cluster模式:(一个作业的失败不会影响下一个作业的提交)
这种模式是每一个job会对应一个yarn session集群,所以这个job所对应的yarn session集群他不会和其他的job共享的,他是相互独立的,只要你这台集群总的资源是够大的,那么你就可以源源不断的一直提交新的job,所以两种模式,这一种用的最多,也是最方便的,如图所示:
为什么说Per-Job-Cluster模式最方便呢?
因为session-cluster模式在flink job没提交之前我得先把yarn session集群准备好,(多个flink共享一个yarn session集群)所以我在flink job集群提交之前就得把yarn session集群准备好,或者说他早就存在已经有了,我再提交 ;所以一般来说session-cluster这种模式我首先得启动yarn session这个集群
什么是yarn session集群呢?
Yarn session集群就是由yarn管理的一个flink的包含了JobManager,TaskManager的这么一个集群,如图所示:
我独立模式下,一个JobManager里面包含了三个TaskManager,那为什么是三个TaskManager呢?
因为我的每台机器上都只有一个TaskManager呀!
请问这些TaskManager跟Hadoop的yarn有关系吗?
没有关系.他被yarn管理吗?
不会.他的资源来自于yarn吗?
不是,是直接来自于操作系统
所以什么叫yarn session的集群?
yarn session集群就是由yarn来管理的一个在hadoop内部的一个小的Flink的运行集群,包含了JobManager和多个TaskManager
简要记录源码阅读过程
总结per-job-cluster模式及提交流程
- 本文作者: xubatian
- 本文链接: http://xubatian.cn/Flink源码分析-Flink-on-yarn-的-per-job-cluster模式及提交流程/
- 版权声明: 本博客所有文章除特别声明外均为原创,采用 CC BY 4.0 CN协议 许可协议。转载请注明出处:https://www.xubatian.cn/