Flink集群部署&运行架构

Flink(一):Flink集群部署&运行时架构

一、Standlone模式任务调度原理

JobManager:作业管理器,负责协调资源分配和作业执行。资源分配完成后,将任务提交给TaskManager。
TaskManager:执行任务的工作节点。会定期想JobManager汇报状态。
Client:提交Flink程序
Flink集群部署&运行架构_第1张图片JobManager是Standlone模式中整个系统最有可能导致整个系统不可用的角色。如果一个TaskManager挂掉,TaskSlot(资源充足)最够的话,则只需要把相关的task调度到其他空闲的TaskSlot上,然后job从checkpoint中恢复即可。当集群中只有一个JobManager,则一旦JobManager挂掉,必须等待JobManager重新恢复,如果恢复时间过长,就可能导致整个job的失败。

1.Standlone模式高可用HA模式
解决JobManager单点故障问题,Standlone模式提供集群的高可用HA模式
Flink集群部署&运行架构_第2张图片

二、Flink on Yarn模式

企业中为了最大化利用集群资源,一般都会运行多种类型的Workload。因此Flink也支持在Yarn上面运行,前提是hdfs、yarn均启动。
Flink on Yarn分为两种运行方式:会话模式和分离模式
1.Yarn-session
Flink集群部署&运行架构_第3张图片
Flink运行在Yarn上,可以使用yarn-session快速提交到Yarn集群。我们先来看下Flink on Yarn模式,Flink如何和Yarn进行交互的。

(1).上传jar包和配置文件到HDFS上。
(2).申请资源和请求AppMaster同期。
(3).Yarn分配资源AppMaster容器,并启动JobManager。
    JobManager和ApplicationMaster运行在container上。
	一旦他们启动成功,AppMaster就知道JobManager运行的地址,他就会为TaskManager生成一个新的Flink配置文件(他们就可以连接到JobManager)这个配置文件也被上传到HDFS上。
	此外,AppMaster容器也提供了Flink的web服务接口。
	Yarn所分配的所有端口都是临时端口,这允许用户并执行多个Flink。
(4).申请worker资源,启动TaskManager。

Flink集群部署&运行架构_第4张图片

2.会话模式
使用Flink中的Yarn-session(yarn客户端),会启动两个必要的服务JobManager和TaskManager。
客户端通过yarn-session提交作业
yarn-session会一直启动,不停地接收客户端提交的作业
有大量的小作业,适合使用这种方式
3.分离模式
直接提交任务给YARN
大作业,使用使用这种方式
Flink集群部署&运行架构_第5张图片
4.会话模式和分离模式总结
分离模式:独享Dispatcher与ResourceManager、按需申请资源和适合执行时间较长的大作业
会话模式:共享Dispatcher与ResourceManager、共享资源和适合规模小,执行时间短的作业。
5.Flink on Yarn运行时组件详解
Flink集群部署&运行架构_第6张图片
Flink运行时的组件-作业管理器(JobManager)
(1)控制一个应用程序的主进程,也就是说,每个应用程序都会被一个JobManager所控制执行。
(2)JobManager会先接收到提交过来的程序,这个应用程序包括:作业图(JobGraph)、数据流图(logical dataflow graph)和打包了所有的类、库和其他资源的JAR包。
(3)JobManager会向ResourceManager请求执行任务的资源,也就是具体执行任务的TaskManager上的slot。获取到了足够执行任务的资源,就会将执行图分发到运行任务的节点(TaskManager)上,运行过程中,JobManager会负责所有需要中央协调的操作,例如检查点的协调。

Flink运行时的组件-任务管理器(TaskManager)
(1)Flink中的工作进程,通常在Flink中会有多个TaskManager运行,每一个TsakManager有一定数量的slots,slots的数量限制了执行任务的数量。
(2)启动之后会向资源管理器注册他的slot,收到资源管理器的指令后,TaskManager就会将一个或多个插槽提供给JobManager调用。JobManager就可以向插槽分配任务(tasks)来执行了。
(3)在执行过程中,一个TaskManager可以跟其他运行同一个应用程序TaskManager交换数据。

Flink运行时的组件-分发器(Dispatcher)
(1)可以跨作业运行,他为应用提供了REST接口。
(2)当一个应用提交执行时,Dispatcher就会将任务分发给一个JobManager。
(3)由于是REST接口,所以Dispatcher可以作为集群的一个HTTP接入点。
(4)Dispatcher也会启动一个Web UI,用来监控和展示作业的执行信息。
(5)Dispatcher在架构中可能并不是必须的,这取决于应用提交的方式。

6.Flink on Yarn模式任务提交流程
Flink集群部署&运行架构_第7张图片上图是从一个较为高层级视角,来看应用中各组件的交互协作。如果集群环境不同(列如:Yarn,Mesos,Kubernetes,standlone等),其中一些步骤可以省略,或是有些组件会运行在同一个JVM进程中。
Flink集群部署&运行架构_第8张图片
TaskManager和slots
Flink集群部署&运行架构_第9张图片

(1)Flink中每一个works(TaskManager)都是一个JVM进程,他可能会独立的线程上执行一个或多个subtask。
(2)TaskManager为了对资源进行隔离和增加允许的task数,引入了slot的概念,这个slot资源的隔离仅仅是对内存进行隔离,策略是均分。
(3)为了控制一个worker能接收多个task,worker通过task slots来进行控制(一个worker至少有一个task slot)
(4)可以通过参数taskmanager.numberOfTaskSlots进行配置,而并行度parallelism是动态的概念,即TaskManager运行程序时实际使用并发能力,可以通过parallelism.default进行配置。
(5)Flink集群所需的taskslots数与job中最高的并行度一致,不需要再去计算一个程序总共起多少个Task。
(6)假设一共有3个TaskManager,每一个TaskManager中分配3个TaskSlot,也就是每个TaskManager可以接收3个task,一共9个TaskSlot,如果我们设置parallelism.default=1,及运行程序默认的并行度为1,9个TaskSlot只用了1个,空闲8个,因此,设置合适的并行度才能提高效率。

槽共享
(1)Flink默认允许同一个job下的subtask可以共享slot。
(2)这样可以使得同一个slot运行整个job流水线
(3)槽共享可以获得如下好处:
①只需要计算job中最高的并行度的task slot,只要这个满足,其他的job也都能满足。
②资源分配更加公平,如果有比较空闲的slot可以将更多的任务分配给他。
③有了任务槽共享,可以提高槽资源的利用率,同时还可以保障TaskManager的分配slot方案更加公平。
④经验上讲Slot的数量与CPU-core的数量一致最好,考虑到超线程,可以让slotNumber=2*cpuCore

7.程序与数据流
所有Flink程序都是由三部分组成:Source、transformation和Sink
(1)在运行时,Flink上运行程序会被映射成“逻辑数据流”(dataflows),包含了三部分。
(2)每一个Dataflows以一个或多个Source开始或一个或多个sinks结束。Dataflow类似有向无环图(DAG)。
(3)在大部分情况下,程序中转换算子(transformations)和dataflow中的算子(operator)是一一对应的关系,但有时候,一个transformation可能对应多个operator。
8.执行图
Flink中的执行图分为四层:StreamGraph->JobGraph->ExecutionGraph->物理执行图。
StreamGraph:是根据用户通过Stream API编写的代码生成的最初的图,用来表示程序的拓扑结构。
JobGraph:StreamGraph经过优化后生成了JobGraph,提交给了JobManager的数据结构。主要的优化为,将多个符合条件的节点chain(Operator chain)在一起作为一个节点,这样可以减少数据在节点之间流动所需要的序列化/反序列化/传输消耗。
ExecutionGraph:JobManager根据JobGraph生成ExecutionGraph。ExecutionGraph是JobGraph的并行化版本,是调度层最核心的数据结构。
物理执行图:JobManager根据ExecutionGraph对Job进行调度后,在各个TaskManager上部署Task后形成的“图”,并不是一个具体的数据结构。

本次到这里暂时结束啦,下次学习并行度。。。

你可能感兴趣的:(大数据开发,flink)