Flink on Yarn_K8S 原理剖析及实践(一)| 学习笔记

简介: 快速学习 Flink on Yarn_K8S 原理剖析及实践。

开发者学堂课程【Apache Flink 入门到实战 - Flink 开源社区出品 Flink on Yarn_K8S 原理剖析及实践(一)】学习笔记,与课程紧密联系,让用户快速学习知识。

课程地址:https://developer.aliyun.com/learning/course/632/detail/10043


Flink on Yarn_K8S 原理剖析及实践(一)

 

内容简介:

一、Flink 架构概论

二、Flink on Yarn 原理及实践

三、Flink on Kubernetes 原理及实践

四、答疑环节

 

一、Flink 架构概论

(1)Flink 架构概论

这是一个典型的 flink 任务,就是通过 DataStream API 、 DataSet API 、 SQL 或者 TableAPI 去编写 Flink 任务,它会生成一个JobGraph ,当这个 Flink 处提交给之后,它会运行在好很几种情况下,

第一个是 Local 模式;

第二个是 Standalone 模式

第三种是Yarn 模式

第四种是 Kubernetes 模式,

对这个 JobGraph 来说,它里面是分成 Operator ,可以看下图里,就是有 Source 、 map 、KeyBy 、还有 Sink 这个 Operator ,然后每个 Operator 在运行过程中是可以设置它自己独立的变化度, Operator 之间,是有一个数据的加法过程。如下图:

image.png 

(2)JobManger

首先我们来介绍一下 Flink 里面几个概念,其中第一个是JobManager , JobManager 主要解决的工作,主要第一个是将JobGraph 转换成一个 Execution Graph 然后将 Execution Graph拿来运行

第二个是 Scheduler ,就是一个调度,它负责 task 的调度第三个是 checkpoint coordinator ,看名字就知道,就是做 JobManager 的,用来协调整个任务的 checkpoint包括checkpoint 的开始完成都是通过 JobManager 进行协调的

第四部分就是说它里面有一个 Actor system 是负责通信的,主要是和 JobManager 结合, taskManager 的一个通信。其实 JobManager 还有一些其他的功能,比如它有些 Metadata 、 Recovery ,就是当它故障恢复的时候,可以从 Metadata 里面读一下数据,这个是JobManager 的一个主要的一个功能,如下图:

image.png

(3)TaskManager

其次介绍下 TaskManager ,它是负责具体任务的一个执行过程,当JobManager 申请到资源之后,它就去学习启动 TaskManager ,它里面主要的主角是:第一个是 Memory & l/O Manager ,就是内存和 io的管理;第二个是 Network Manager ,就是对网络方面的管理;第三个 Actor system ,就是负责网络通信方面的。

在 TaskManager 里面,它是分成很多 Tsak Status ,每一个 Tsak Status 是它所调度的资源的一个最小的一个单位,就是说它的任务是运行在一个 Tsak Status 里面,然后在 Flink 里面, Task 之间是可以通过task group 的方式进行共享,如下图:

image.png

(4)Flink Standalone 模式

在介绍 Yarn 之前,先简单介绍一下 Flink Standalone 模式,这样有助于了解后面的 Yarn 和 Kubernetes ,在 Flink Standalone 单独模式下,可以它的整个调度,是 Flink 自己来实现的,可以将Master 和 TaskManager ,它是不同的进程,可以运行在一台机器上面,也可以运行在不同的机器上面,在 Flink Master进程里面,它有几个部分,第一个就是 Standalone ResourceManager ,就是对资源进行管理的;

第二个就是当用户从 Flink Client ,让他提交一个JobGraph 给 master 的时候,它第一个先经过 Dispatcher ,可以理解 Dispatcher 为是一个方法,当收到客户端的请求之后,它会生成一个 JobManager 的进程.它需要注册到 ResourceManager ,注册之后, ResourceManager 再将具体的 task 任务分发给 TaskManager去执行,这是三动模式的一个运行过程,在后面我们会讲到 Yarn 和 Kubernetes 格式,两种方式,很多地方其实是相通的,

如下图:

image.png

(5)小结

来总结一下,第一章里面讲了 Flink 的基本架构和它的运行的一些组件,第一个是 Client ,就是任务的提交,用户在客户端通过  Client 或者 API 的方式提交任务,它会生成一个 JobGraph ;第二个是 JobManager ,它接受了用户的请求之后,就对任务进行调度,并且会申请资源启动 task ,包括中国的有效的通信,其实是TaskManager ,它是负责一个具体的 task 的执行,他会像JobManager 请求支援,然后接触到 JobManager 分配给它的任务之后,开始具体的任务执行。

 

二、Flink on Yarn 原理及实践

(1)Yarn 架构原理-总览

因为这种模式在国内用的很多,基本上所有的公司在生产环境可能大部分都是使用的 Yarn ,来介绍一下 Yarn 架构原理,因为只有了解了 Yarn ,才能知道 Flink 在 Yarn 中运行的,就说 Yarn 里面最主要角色就是 ResourceManager ,它是负责整个资源的管理,然后 Client 端向 ResourceManager 提交一个任务像之前 Yarn

它提交给 ResourceManager 之后,它会向会申请一个 Container,就第一个 Container 里面,会起一个Application master ,这是 Yarn 里面的概念,比如如果是一个MapReduceStatus 的任务,那这个 master 就是 MapReduceStatus的一 master ,当 master 起来之后,它会重新再根据 master 任务的要求再去申请资源,比如需要三个 task ,这个有三个 map 和三个 reduce ,那这样他会兴起六个 task ,这样 ResourceManager会将资源重新分配,分配给它,接着这个 Application master 它就会根据分配给它的资源,再去启动具体的 container ,然后在container 上面,去运行具体的 Map 或者 Reduce ,然后所有的 container ,都是通过 Node Manager 去管理的,这是一样的一个基本的一个架构,如下图:

image.png

(2)Yarn 架构原理-组件

可以看到在架构里面,分为四部分,第一个为 ResourceManager一般简称为 RM ,处理客户端请求、启动监控 APP master 、他会监控 NodeManager ,主要的是资源的分配和调度,它主要是包括schedule 、 Application manager ;

第二个是 ApplicationMaster ,简称 为AM ,运行在 Slave 上,负责数据切分,申请资源和分配,任务监控和容错, AM 是一个比较核心的角色,比如 Flink ,如果不运行 flink 任务,肯定是要实现一个自己的AM ;

第三个 NodeManager ,简称 NM ,它是运行在 Slave 上,单节点的资源管理,与 AM/RM 通信,汇报情况;第四个是 Container ,它是资源抽象,包括内存、 CPU 、磁盘、网络等资源,其中 AM 和NM 都是运行在 Container 上。

(3)Yarn架构原理-交互

具体讲解 Yarn 的交互原理,会对后面对付 Flink 的执行会很有帮助,第一个就是提交任务,我在看 Client 端写了一个代码,这个任务提交之后,它会先给 ResourceManager ,之后,它会返回给你一个 application ID ,就是 Client 拿这个 ID ,再继续提交任务的上下文,比如说任务里面到底要执行什么样的程序?有哪些配置?

当证物提交给尾数是 ResourceManager 之后,它会启动 Container ,第一个 Container 里面是启动的是application master ,就他就是其中那个 master 节点,当 master别人启动之后,它会找 ResourceManager ,再重新申请资源,因为它知道当前需要运行哪几个任务,这个任务有多少个,比如会不会丢失节点,有多少个并发,所以这个 Application 来找ResourceManager 再重新申请资源,这时候 ResourceManager 将资源分配给 application master ,然后 application master将具体的 task 的调动起来去执行。比如它要启动哪一个 task 、启动的那个命令是多少、上下本是多少,由 NodeManager 将它拿起来,然后进行运行,

如下图:

image.png

(4)Flink on Yarn - Per Job

先讲一下 Per Job 模式,每次提交的是一个任务,然后用户运行完成之后,这个资源就被释放了。看这个流程,其实了解前面讲到的 Yarn原理,基本上对 Flink 的这个流程可能会比较熟悉了,它第一步,Client 端提交,提交一个 Yarn 的 APP ,比如是写了一 JobGraph ,然后,这是一个 Yarn 的 ResourceManager ,这个地方还是 Yarn 的角色,就 ResourceManager ,它会申请第一个 Container ,第一个可能启动的进程就是 application master ,里面运行的就是 flink的程序,包括里面第一个是 Flink 的 Yarn ,相当于是 Flink 有一个自己的 ResourceManager 来讲,就是自己的资源管理,然后它里面还会起一个 JobManager ,当着它启来之后,它先申请资源,就说JobManager 它根据 JobGraph 去申请,比如说要启多少个 task ,它找 Flink  Yarn 的 ResourceManager 去申请,然后  Flink  Yarn 的 ResourceManager分配好资源之后,它再去启动TaskManager ,它分配提成完之后,对Flink  Yarn的ResourceManager 进行一个注册的过程,注册完成之后, JobManager再将具体的 task 分配给 TaskManager 去执行,这就是整个 Flink的一个 Rer Job 的执行模式,

如下图:

image.png

(5)Flink on Yarn - Session

接着讲一下 Session 模式,在 Per Job 模式下面,一般执行完任务之后,整个资源就释放了,包括 JobManager 和 TaskManager 全部都会退出, Session 模式不一样,它的 JobManager 是可以复用的。

重点看一下中间的节点,就是 JobManagerA 和 JobManagerB ,首先提一个 A 的任务, Dispatcher 收到请求之后,它会启动一个JobManagerA ,然后由它来完成后面的事情,包括申请资源,然后启动 TaskManager ;但同时还可以提 Job B , Dispatcher 在收到JobManager 的请求之后,它会启一个 JobManagerB ,它负责 Job B任务的资源申请和 TaskManager 的一个运行。

如果这是 A 的任务,运行结束之后,资源也不会释放;然后当B任务运行完成,资源也不会释放, Session 模式它的特点就是资源会一直存在,不会释放。

然后它的多个 JobManager ,它是共享 Dispatcher ,还有共享 Flink Yarn 的 ResourceManager. 。 Session 模式和 Per Job 模式区别就是它的用处是什么,在 Per Job 下面,因为它比较适合运行时间比较长的任务,虽然申请资源可能长点,但是认为运行时间也很长;

Session 模式适合比较小的任务,可能运行很短时间就退出了,如果用 Per Job 模式去运行,那就需要频繁的申请资源,申请资源释放而运行结束就下次又得重新运行,再重新申请资源,然后,然后结束了这种任务,就适合用 Session 模式,如下图:

image.png

(6)Yarn 模式的优点

为什么使用 Yarn 模式,而不是 Standalone 模式。实际上Standalone 模式,也在生产环境可以用,但它可能说一般机器数不会太多。 Yarn 模式的优点是什么?

第一个是它的资源是按需使用的,它可以提高整个集群的资源利用率,它通过 Yarn ResourceManager进行资源的管理;第二个就是 Yarn 模式,它的任务调度策略是比较多的,比如 PFO Scheduler 就是先进先出、 Capacity Scheduler就是按照容量调度、 Fair Scheduler 就是公平调度,甚至它可以设置一些任务优先级,然后这样就对生产环境的任务可以做很好的一个调度策略,可以达到一个最优的集群资源利用率;

第三个是它可以做一些废物的处理,就用 Yarn 帮你做,比如 NodeManager 可以监控,  Yarn ApplicationManager 可以做一个异常的恢复,这些都是 Yarn 天然提供的攻略, Yarn 模式在生产环境会更稳定,提升质量也会比较高。

(7)Flink on Yarn 实践

因为 Yarn 模式之前讲的比较多,像之前讲几个课程,讲 Flink 安装部署的,还有 Flink 操作,可以点开这个链接去看一下,链接如下:https://zh.ververica.corn/developers/flink-training-course1/, Yarn 模式的操作,这里就不重复了。

相关实践学习
深入解析Docker容器化技术
Docker是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的Linux机器上,也可以实现虚拟化,容器是完全使用沙箱机制,相互之间不会有任何接口。Docker是世界领先的软件容器平台。开发人员利用Docker可以消除协作编码时“在我的机器上可正常工作”的问题。运维人员利用Docker可以在隔离容器中并行运行和管理应用,获得更好的计算密度。企业利用Docker可以构建敏捷的软件交付管道,以更快的速度、更高的安全性和可靠的信誉为Linux和Windows Server应用发布新功能。 在本套课程中,我们将全面的讲解Docker技术栈,从环境安装到容器、镜像操作以及生产环境如何部署开发的微服务应用。本课程由黑马程序员提供。     相关的阿里云产品:容器服务 ACK 容器服务 Kubernetes 版(简称 ACK)提供高性能可伸缩的容器应用管理能力,支持企业级容器化应用的全生命周期管理。整合阿里云虚拟化、存储、网络和安全能力,打造云端最佳容器化应用运行环境。 了解产品详情: https://www.aliyun.com/product/kubernetes
相关文章
|
7月前
|
运维 分布式计算 Kubernetes
【能力比对】K8S数据平台VS数据平台
杭州奥零数据科技有限公司成立于2023年,专注于数据中台业务,维护开源项目AllData并提供商业版解决方案。AllData提供数据集成、存储、开发、治理及BI展示等一站式服务,支持AI大模型应用,助力企业高效利用数据价值。
【能力比对】K8S数据平台VS数据平台
|
资源调度 负载均衡 Kubernetes
【Flink on Yarn的三种部署方式详细介绍,及应用场景】
Flink on Yarn的三种部署方式,Session模式,Per-Job模式,application模式,他们为何会诞生,我们要用哪种模式来部署
1771 1
【Flink on Yarn的三种部署方式详细介绍,及应用场景】
|
4月前
|
SQL 关系型数据库 Apache
从 Flink 到 Doris 的实时数据写入实践 —— 基于 Flink CDC 构建更实时高效的数据集成链路
本文将深入解析 Flink-Doris-Connector 三大典型场景中的设计与实现,并结合 Flink CDC 详细介绍了整库同步的解决方案,助力构建更加高效、稳定的实时数据处理体系。
1964 0
从 Flink 到 Doris 的实时数据写入实践 —— 基于 Flink CDC 构建更实时高效的数据集成链路
|
10月前
|
人工智能 运维 Cloud Native
【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析
在大数据与云原生技术快速发展的时代,开源技术成为推动行业进步的重要力量。本文深入探讨了三个备受瞩目的开源产品组件:DeepSeek、DataSophon 和 DolphinScheduler。DeepSeek 是专注于自然语言处理的大语言模型,具备多模态交互和高效推理功能;DataSophon 是大数据云原生平台的智能管家,提供快速部署和智能化运维;DolphinScheduler 则是分布式任务调度系统,支持复杂工作流的编排与执行。三者分别在大语言模型、大数据管理和任务调度领域展现了强大的技术实力,并通过技术互补共同推动AI与大数据技术的深度融合。
1323 2
【技术产品】DS三剑客:DeepSeek、DataSophon、DolphineSchduler浅析
|
资源调度 Kubernetes Java
Flink--2、Flink部署(Yarn集群搭建下的会话模式部署、单作业模式部署、应用模式部署)
Flink--2、Flink部署(Yarn集群搭建下的会话模式部署、单作业模式部署、应用模式部署)
|
11月前
|
SQL 存储 大数据
Flink 基础详解:大数据处理的强大引擎
Apache Flink 是一个分布式流批一体化的开源平台,专为大规模数据处理设计。它支持实时流处理和批处理,具有高吞吐量、低延迟特性。Flink 提供统一的编程抽象,简化大数据应用开发,并在流处理方面表现卓越,广泛应用于实时监控、金融交易分析等场景。其架构包括 JobManager、TaskManager 和 Client,支持并行度、水位线、时间语义等基础属性。Flink 还提供了丰富的算子、状态管理和容错机制,如检查点和 Savepoint,确保作业的可靠性和一致性。此外,Flink 支持 SQL 查询和 CDC 功能,实现实时数据捕获与同步,广泛应用于数据仓库和实时数据分析领域。
7680 32
|
存储 SQL 资源调度
实时计算 Flink版产品使用合集之FlinkonYARN的taskslot为0的原因是什么
实时计算Flink版作为一种强大的流处理和批处理统一的计算框架,广泛应用于各种需要实时数据处理和分析的场景。实时计算Flink版通常结合SQL接口、DataStreamAPI、以及与上下游数据源和存储系统的丰富连接器,提供了一套全面的解决方案,以应对各种实时计算需求。其低延迟、高吞吐、容错性强的特点,使其成为众多企业和组织实时数据处理首选的技术平台。以下是实时计算Flink版的一些典型使用合集。
|
存储 固态存储 关系型数据库
Apache Doris 系列: 入门篇-安装部署
Apache Doris 系列: 入门篇-安装部署
3978 0
|
消息中间件 NoSQL 数据处理
如何进行实时数据处理:技术深度剖析
【8月更文挑战第25天】实时数据处理是现代企业不可或缺的能力之一,它要求系统具备高吞吐量、低延迟、高可用性和可扩展性。通过合理的架构设计、技术选型和持续优化,可以构建出满足业务需求的实时数据处理系统。未来,随着技术的不断进步和应用场景的不断拓展,实时数据处理将在更多领域发挥重要作用。
1074 3
|
关系型数据库 API Apache
Flink CDC:基于 Apache Flink 的流式数据集成框架
本文整理自阿里云 Flink SQL 团队研发工程师于喜千(yux)在 SECon 全球软件工程技术大会中数据集成专场沙龙的分享。
21303 11
Flink CDC:基于 Apache Flink 的流式数据集成框架