义乌做网站的公司,山东浩景建设有限公司网站,开发软件能赚多少钱,wordpress 两个网站Flink、Yarn架构#xff0c;以Flink on Yarn部署原理详解
Flink 架构概览
Apache Flink是一个开源的分布式流处理框架#xff0c;它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础#xff0c;架构原理可以分为以下四个部分#xff1a;JobManager、TaskM…Flink、Yarn架构以Flink on Yarn部署原理详解
Flink 架构概览
Apache Flink是一个开源的分布式流处理框架它可以处理实时数据流和批处理数据。Flink的架构原理是其实现的基础架构原理可以分为以下四个部分JobManager、TaskManager、JobGraph、Checkpoint。 JobManager JobManager是Flink集群的控制节点负责接收用户提交的任务将任务分配给TaskManager进行执行并监控任务的执行状态。JobManager还负责保存和恢复Flink应用程序的状态信息以及维护JobGraph对任务进行调度和优化。 TaskManager TaskManager是Flink集群的工作节点负责执行由JobManager分配的任务。每个TaskManager可以执行多个任务每个任务对应一个或多个并行的TaskSlot。TaskSlot是TaskManager中的一个线程池它负责执行任务的具体业务逻辑。TaskManager还负责将任务的状态信息发送给JobManager以便JobManager能够监控任务的执行状态。 JobGraph JobGraph是Flink应用程序的执行图它描述了任务之间的依赖关系和数据流向。JobGraph由JobManager维护它包含了所有任务的信息包括任务的输入输出、并行度、任务类型等等。JobManager在接收到用户提交的任务后会将任务解析成JobGraph然后对JobGraph进行调度和优化最终将任务分配到TaskManager上执行。 Checkpoint Checkpoint是Flink用于实现容错机制的重要组成部分。Flink支持两种类型的Checkpoint精确一次Exactly Once和至少一次At Least Once。Checkpoint会在任务执行过程中周期性地将任务状态信息保存到持久化存储中以确保在任务失败或系统故障时能够恢复任务状态。在Flink中Checkpoint的实现采用了异步快照机制即在Checkpoint过程中不会阻塞任务的执行从而保证任务的高吞吐量和低延迟。
用户通过 DataStream API、DataSet API、SQL 和 Table API 编写 Flink 任务它会生成一个 JobGraph。JobGraph 是由 source、map()、keyBy()、window()、apply()和 sink 等算子组成的。当 JobGraph 提交给 Flink 集群后能够以 Local、Standalone、Yarn 和kubernetes 四种模型运行。 接下来深入关注Flink中两个关键组件JobManager和TaskManager
JobManager架构 JobManager是Flink集群的控制节点负责接收用户提交的任务将任务分配给TaskManager进行执行并监控任务的执行状态。
Flink JobManager架构原理的核心是JobMaster和ResourceManager其中JobMaster负责任务的调度和监控ResourceManager负责集群资源的管理。JobMaster和ResourceManager之间通过RPC通信进行交互。
JobMaster主要负责以下几个方面
任务管理
JobMaster负责接收用户提交的任务并将任务转换为JobGraph。JobGraph是Flink应用程序的执行图它描述了任务之间的依赖关系和数据流向。JobMaster会对JobGraph进行优化和调度并将任务分配给TaskManager进行执行。
任务监控
JobMaster会监控任务的执行状态包括任务的启动、暂停、恢复和取消等操作。如果任务执行失败JobMaster会重新分配任务或者通知用户进行处理。
状态管理
Flink支持任务的状态管理和恢复JobMaster负责保存和恢复任务的状态信息。在任务执行过程中JobMaster会周期性地将任务状态信息保存到持久化存储中以确保在任务失败或系统故障时能够恢复任务状态。
高可用性
为了保证JobMaster的高可用性Flink采用了主备模式。即在Flink集群中有一个主JobMaster和若干备JobMaster。当主JobMaster发生故障时备JobMaster会接管任务的管理和调度。
TaskManager架构 Flink TaskManager架构原理的核心是TaskExecutor和Slot其中TaskExecutor是Flink集群中的工作节点负责执行任务Slot是TaskExecutor中的任务执行单元用于执行任务的并发执行。
TaskExecutor是Flink集群中的工作节点它是执行Flink任务的基本单元。一个Flink TaskExecutor节点可以运行多个Slot每个Slot是TaskExecutor中的任务执行单元用于执行任务的并发执行。
在Flink任务启动时JobManager会将任务的JobGraph分配给一组TaskManager节点每个TaskManager节点会启动一个或多个TaskExecutor进程。在TaskExecutor进程启动时会为每个Slot创建一个独立的线程池用于执行任务。
Slot是TaskExecutor中的任务执行单元每个Slot都可以同时执行一个任务。任务被分配给Slot后Slot会启动一个线程来执行任务从输入数据流中读取数据并将处理结果输出到输出数据流中。
每个Slot都有自己的资源限制包括CPU、内存、网络等资源。任务的执行会根据资源限制进行调度以达到最优的资源利用率。当任务执行结束后Slot会释放资源以供其他任务使用。
Flink支持任务的动态调整包括任务的扩容和缩容。当任务需要更多的资源时Flink可以动态地增加TaskExecutor节点来满足任务的需求。反之当任务执行结束后Flink会回收空闲的TaskExecutor节点以节省资源。
TaskManager主要负责以下功能 执行任务 TaskManager负责接收来自JobManager的任务并将任务分配到Task执行器中执行。每个TaskManager可以运行一个或多个任务。 管理任务状态 TaskManager负责管理任务的状态和执行上下文并向JobManager报告任务的状态。 数据交换 TaskManager中的网络组件负责数据交换。它负责将数据从一个TaskManager发送到另一个TaskManager并将数据发送到JobManager。 管理资源 TaskManager负责管理其本地资源例如内存和CPU资源并确保任务在可用资源范围内运行。 高可用性 TaskManager支持高可用性。如果一个TaskManager失败Flink会将其上运行的任务重新分配到其他TaskManager上以确保任务继续执行。
Yarn架构概览
Yarn 架构原理 - 总览 YARNYet Another Resource Negotiator是Hadoop生态系统中的一个重要组件它是一个资源管理系统负责管理Hadoop集群中的资源和任务。本文将详细介绍YARN中ResourceManager、NodeManager、ApplicationMaster和Container组件的实现原理。
ResourceManager
ResourceManager是YARN中最重要的组件之一。它是集群资源的总管负责处理客户端应用程序的资源请求以及为应用程序分配资源。ResourceManager主要有以下几个组件
SchedulerScheduler负责为应用程序分配资源它根据应用程序的需求和集群的可用资源进行调度。Scheduler会考虑各个应用程序的优先级以及应用程序对资源的需求量等因素。ApplicationManagerApplicationManager负责管理应用程序的生命周期包括应用程序的提交、启动、停止和监控等。它还负责向Scheduler提交应用程序的资源请求并获取Scheduler分配的资源。
NodeManager
NodeManager是YARN中运行在每台机器上的组件它负责管理单个节点上的资源。NodeManager主要有以下几个组件
ContainerExecutorContainerExecutor负责启动和管理容器。容器是YARN中运行应用程序的基本单位每个容器包含一个或多个任务。ApplicationMasterLauncherApplicationMasterLauncher负责启动ApplicationMaster。ApplicationMaster是应用程序的管理器它负责协调应用程序的各个任务以及与ResourceManager交互。NodeStatusUpdaterNodeStatusUpdater负责向ResourceManager汇报节点的状态包括节点的可用资源、健康状况等。
ApplicationMaster
ApplicationMaster是YARN中应用程序的管理器运行在 Slave 上它负责数据切分申请资源和分配、任务监控和容错以及与ResourceManager交互。
Container
Container是YARN中运行应用程序的基本单位每个容器包含一个或多个任务。Container 负责对资源进行抽象包括内存、CPU、磁盘、网络等资源。
其中最重要的角色是 ResourceManager主要用来负责整个资源的管理Client 端是负责向 ResourceManager 提交任务。
Yarn 架构原理 - 任务提交
当用户提交一个任务到YARN时任务的提交过程可以分为以下几个步骤
应用程序提交
用户首先需要将应用程序提交到YARN中。这可以通过命令行工具或API接口完成用户需要指定应用程序的名称、资源需求和启动命令等信息。
申请资源
一旦应用程序提交成功它将会向ResourceManager发送资源请求。ResourceManager会根据集群中的可用资源和其他应用程序的需求为这个应用程序分配一定数量的资源。
分配容器
一旦ResourceManager为应用程序分配了资源它将会向NodeManager发出请求要求它在一台或多台机器上启动容器。NodeManager接收到请求后将会为每个容器分配一定数量的资源并启动容器。
下载依赖文件
在容器启动之前NodeManager需要下载应用程序的依赖文件例如JAR文件到容器中。这是通过Localizer来完成的。Localizer会从HDFS中下载应用程序的依赖文件并将它们解压到容器的本地文件系统中。
启动ApplicationMaster
一旦容器启动并准备好运行应用程序NodeManager将会启动ApplicationMaster。ApplicationMaster是应用程序的管理器负责协调应用程序的各个任务以及与ResourceManager交互。
分配任务
一旦ApplicationMaster启动成功它将会向ResourceManager请求更多的资源以分配应用程序的任务。ResourceManager会根据应用程序的需求和集群的可用资源为每个任务分配一个容器。
执行任务
一旦任务被分配到容器中TaskExecutor将会从容器中获取任务并在本地执行任务。执行完成后TaskExecutor会向ApplicationMaster报告任务的状态。
总之任务提交到YARN的过程涉及多个组件之间的协作和通信。其中ResourceManager负责管理集群资源NodeManager负责管理单个节点上的资源ApplicationMaster负责协调应用程序的各个任务而Container则是运行应用程序的基本单位。 任务的执行和状态监控也涉及多个组件之间的协作和通信。在这个过程中YARN通过将资源管理和任务管理分离实现了高效的资源利用和任务协调。
Flink on Yarn 部署原理剖析
Flink on Yarn Per-Job Flink on Yarn 中 PerJob 模式是指每次提交一个任务然后任务运行完成之后资源就会被释放。在了解了Yarn 的原理之后PerJob 的流程也就比较容易理解了具体如下
首先 Client 提交 Yarn App比如 JobGraph 或者 JARS。接下来 Yarn 的 ResourceManager 会申请第一个 Container。这个 Container 通过 ApplicationMaster 启动进程ApplicationMaster 里面运行的是 FLink 程序即 Flink-Yarn ResourceManager 和 JobManager。最后 Flink-Yarn ResourceManager 向 Yarn ResourceManager 申请资源。当分配到资源后启动 TaskManager。TaskManager 启动后向 Flink-Yarn ResourceManager 进行注册注册成功后 JobManager 就会分配具体的任务给 TaskManager 开始执行。
在Flink on Yarn的Per-Job模式中每个Flink任务实现资源隔离的主要方式如下
独立的Yarn应用程序每个Flink作业都会被打包成一个独立的Yarn应用程序包括一个JobManager进程和若干个TaskManager进程。这样可以保证每个Flink作业都运行在一个独立的应用程序中避免了不同作业之间的资源冲突和干扰。动态资源分配在Flink on Yarn Per-Job模式中Flink作业会根据实际资源需求向Yarn资源管理器请求所需的资源并在作业执行期间动态调整资源使用情况。这样可以避免Flink作业占用过多资源导致其他作业无法正常执行。容器隔离在Yarn中每个应用程序都运行在一个独立的容器中容器之间是相互隔离的。Flink作业也是运行在Yarn的容器中这样可以保证每个Flink作业之间的资源隔离性。任务隔离Flink作业中的每个任务都是独立执行的它们之间不会共享任何资源包括内存、CPU、网络等。同时Flink还提供了TaskExecutor的资源管理机制可以根据每个任务的资源需求动态调整资源分配情况从而保证每个任务都能够得到足够的资源。
Flink on Yarn Session 在 PerJob 模式中执行完任务后整个资源就会释放包括 JobManager、TaskManager 都全部退出。而 Session 模式则不一样它的 Dispatcher 和 ResourceManager 是可以复用的。
Session模式的Flink任务部署过程跟Per-Job类似两者之间的区别在于
部署方式Session模式是一种长期运行的Flink集群模式用户可以通过Flink客户端连接到集群中的一个或多个JobManager提交多个Flink作业而PerJob模式则是每个Flink作业都会创建一个独立的Yarn应用程序并在该应用程序中启动JobManager和TaskManager进程。资源使用Session模式是预分配资源的也就是提前根据指定的资源参数初始化一个Flink集群并常驻在YARN系统中拥有固定数量的JobManager和TaskManager该资源中JobManager有且只有一个。作业隔离Session模式下由于是预分配资源资源总量有限多个作业之间又不是隔离的故可能会造成资源的争用如果有一个作业因为异常导致TaskManager宕机则它上面承载着的所有作业也都会受到影响。而在PerJob模式下由于每个Flink作业都会创建一个独立的Yarn应用程序因此不同作业之间也是相互隔离的。适用场景PerJob模式适用于长期运行的Flink集群场景适合处理大量的实时数据例如流处理、复杂事件处理等而Session模式适用于短期的、需要单独调度的Flink作业。 Flink on Yarn Application
application模式在该模式下会为每个提交的应用创建一个集群用户程序的 main 方法将在JobManager集群中而不是客户端运行。
Application模式的会话集群仅在特定应用程序的作业之间共享并在应用程序完成时终止。
在这种体系结构中Application 模式在不同应用之间提供了资源隔离和负载平衡保证。在特定一个应用程序上JobManager 执行 main() 可以节省所需的 CPU 周期还可以节省本地下载依赖项所需的带宽。 附官网的模式区分如下所示