购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 部署模式

一些应用场景对集群资源分配和占用的方式,可能会有特定的需求。Flink为各种场景提供了不同的部署模式,主要有以下3种:

· 会话模式(Session Mode)。

· 单作业模式(Per-Job Mode)。

· 应用模式(Application Mode)。

它们的区别主要在于:集群的生命周期和资源的分配方式,以及应用的main方法到底在哪里执行——客户端(Client)还是JobManager。接下来我们进行展开说明。

3.2.1 会话模式

会话模式其实最符合常规思维。我们需要先启动一个集群,保持一个会话,在这个会话中通过客户端提交作业,如图3-10所示。因为集群启动时所有资源都已经确定,所以所有提交的作业会竞争集群中的资源。

图3-10 会话模式

这样的好处很明显,我们只需要一个集群,就像一个大箱子,所有的作业提交之后都塞进去;集群的生命周期是超越于作业的,作业结束了就释放资源,集群依然正常运行。当然缺点也是显而易见的:因为资源是共享的,所以资源不够了,提交新的作业就会失败。另外,同一个TaskManager上可能运行了很多作业,如果其中一个发生故障导致TaskManager宕机,那么所有作业都会受到影响。

我们在3.1节中先启动集群再提交作业,这种方式其实就是会话模式。

会话模式比较适用于单个规模小、执行时间短的大量作业。

3.2.2 单作业模式

会话模式的资源共享会导致很多问题,为了更好地隔离资源,我们可以考虑为每个提交的作业启动一个集群,这就是所谓的单作业(Per-Job)模式,如图3-11所示。

图3-11 单作业模式

单作业模式也很好理解,就是严格地执行一对一,集群只为这个作业而生。同样由客户端运行应用程序,然后启动集群,作业被提交给JobManager,进而分发给TaskManager执行。作业完成后,集群就会关闭,所有资源也会释放。这样一来,每个作业都有它自己的JobManager管理,占用独享的资源,即使发生故障,它的TaskManager宕机也不会影响其他作业。

这些特性使得单作业模式在生产环境中运行更加稳定,所以是实际应用的首选模式。

需要注意的是,Flink本身无法直接这样运行,所以单作业模式一般需要借助一些资源管理平台来启动集群,比如YARN、Kubernetes。

3.2.3 应用模式

在前面提到的两种模式中,应用代码都是在客户端上执行,然后由客户端提交给JobManager的。但是这种方式客户端需要占用大量网络带宽,去下载依赖和把二进制数据发送给JobManager;加上很多情况下我们提交作业用的是同一个客户端,就会加重客户端所在节点的资源消耗。

解决办法就是,我们不要客户端了,直接把应用提交到JobManger上运行。这也就代表着,我们需要为每个提交的应用单独启动一个JobManager,也就是创建一个集群。这个JobManager只为执行这一个应用而存在,执行结束之后JobManager也就关闭了,这就是所谓的应用模式,如图3-12所示。

图3-12 应用模式

应用模式与单作业模式,都是提交作业之后才创建集群;单作业模式是通过客户端来提交的,客户端解析出的每个作业都对应一个集群;而在应用模式下,是直接由JobManager执行应用程序的,并且即使应用包含了多个作业,也只创建一个集群。

总结一下,在会话模式下,集群的生命周期独立于集群上运行的任何作业的生命周期,并且提交的所有作业共享资源;单作业模式为每个提交的作业创建一个集群,带来了更好的资源隔离,这时集群的生命周期与作业的生命周期绑定;应用模式为每个应用程序创建一个会话集群,在JobManager上直接调用应用程序的main()方法。

我们所讲的部署模式,是相对比较抽象的概念。在进行实际应用时,一般需要和资源管理平台结合起来,选择特定的模式来分配资源、部署应用。接下来,我们就针对不同的资源提供者(Resource Provider)的场景,具体介绍Flink的部署方式。 gVcROu+rO2RxAiWnkLUepT6QDdkd0+0pXgs7om7588QNDAtUDhjV41Q5FpA/8RoK

点击中间区域
呼出菜单
上一章
目录
下一章
×