06 flink 的各个角色的交互

news2024/11/13 9:27:02

前言

这里主要是 涉及到 flink 中各个角色的交互 

TaskManager 和 ResourceManager 的交互

JobMaster 和 ResourceManager 的交互

等等流程 

 

 

TaskManager 和 ResourceManager 的交互

主要是 包含了几个部分, 如下, 几个菜单 

TaskManager向 ResourceManager 注册 

ResourceManager 向 TaskManager 心跳的发送 

ResourceManager 这边收到 TaskManager 的 slotReport 之后的处理

 

TaskManager向 ResourceManager 注册 

TaskManager 中 TaskExecutor 启动之后, 会向 ResourceManager 注册 

6bf5331485b54b8785ac8dbd9757a5cf.png

 

注册如下, 向 ResourceManager 这边发送请求, 携带上基本信息, resourceId 是 TaskManagerRunner 中 ResourceID.generate() 随机生成的一个字符串 

ResourceManager 的地址是根据 JobManager 的信息拼接上固定的 “/user/resourcemanager” 得到的 

ebd8fd18d2934814acf831fca098e806.png

 

JobManager 这边的 ResourceManager 注册该 TaskManager 的相关信息, 并相应 ResourceManager 这边创建的 WorkerRegistration 信息返回 

然后这里注册了一个发送到 TaskManager 的定时心跳, 注册到了 ResourceManager.taskManagerHeartbeatManager 中 

9bfd33fe609e471fa33f37ba15ee367a.png

 

 

ResourceManager 向 TaskManager 心跳的发送 

这里 ResourceManager 向 TaskManager 这边心跳的发送是这里 HeartbeatManagerSenderImpl.run 中处理的, 定时的效果是 延时+递归 来实现的 

8da832892a1b49afbe605060dbb73fa5.png

 

然后接着 TaskManager 这边会响应 TaskManager 的各个 slot 的相关信息给 ResourceManager

4f9792bb93f74db897787cb80bbdd188.png 

 

ResourceManager 这边收到 TaskManager 的 slotReport 之后的处理

然后接着就是 ResourceManager 这边的处理, 更新目标 taskManager 的 slot 的相关信息 

261fe60ad42b4ec28d3d09c07fd7918a.png

 

然后 web 页面上, 这里 TaskManager 的相关信息 就是来自于 ResourceManager

ac7bcc81af7c45308ace5c7ea8227265.png 

 

JobMaster 和 ResourceManager 的交互

主要是 包含了几个部分, 如下, 几个菜单 

JobMaster 向 ResourceManager 注册 

 

JobMaster 向 ResourceManager 注册 

同样是 JobMaster 启动的饿时候, 会自动向 ResourceManager 注册 

b9238beb76d54329b98e918a32297392.png

 

注册的信息如下, jobId, jobResourceId, 以及 jobManager 的交互信息 

然后这里的 jobResourceId 同样是 JobMaster 初始化的时候 ResourceID.generate() 生成的一个随机字符串

62dad2f5b2cb4bfcb6d8b0d9b7e2c5e5.png

 

ResourceManager 向 JobMaster 这边心跳的发送

ResourceManager 收到 JobMaster 的注册请求之后, 会向 jobManagerHeartbeatManager 注册向 JobMaster 的心跳任务 

abbc109307d9453d9f4e3d57eae63d15.png 

然后就是 JobManager 这边收到心跳之后, 向 ResourceManager 发送了一个心跳信息, 未携带 任何数据

c637a55c68e344f1b447f1244af784eb.png

 

ResourceManager 这边收到 TaskManager 的 null 之后的处理

无任何处理, 也不用任何处理 

7eecef1860874dec9f77e3f71efeb320.png

 

 

JobMaster 这边资源请求的流程

JobMaster 启动之后, 自动连接 ResourceManager

连接上 ResourceManager 之后, 会向 ResourceManager 发送执行资源的请求 

60424c9481504bf8b0fbeba4a762a218.png

 

然后是 ResourceManager 这边找到合适的 TaskManagerSlot, 然后 allocateSlot, 向 TaskManager 指定具体的 job 

25373c9edfc14bc989433bdb5c3ef93c.png

 

ResourceManager 向 TaskManager 发送请求, 指派其需要执行 目标 job

cf07415c888e4376bbf1b82290782c2b.png

 

然后是 TaskExecutor 注册 job 信息, 以及对方 JobMaster 的交互信息 

2edb9e8e079343d5bc3e2a734f8dde05.png

 

然后是 TaskExecutor 这边主动和目标 JobMaster 获取联系, 表示为 JobMaster 提供一个 TaskManagerSlot 用于执行目标任务 

8c65c650f49f44858a5c77412bbce1fa.png

 

然后是 JobMaster 这边拿到了 TaskManagerSlot 之后执行任务 

585f2be7271d4a968880a1266d76669d.png 

接着是更新 Execution 的 slot 的信息, 然后这个是外层 CompletableFuture 是 Execution.scheduleForExecution 中的 allocationFuture

27280e039fb346b1ac7d58465b827f83.png

 

然后就是 JobMaster 这边的 deploy, 这里会向具体的 TaskExecutor 发送任务 

177c71f8c4604d3f87c83fd4c5af8881.png 

然后 deploy 里面就是根据 ExecutionVertex 封装 TaskDeploymentDescriptor, 然后将相关信息发送到 TaskExecutor 去执行 

6cc8427929a84df698956e3a5799ad73.png 

 

处理函数的传递流程 

这一系列流程如下

  1. driver 这边采集各个函数对象, 封装 UserCodeObjectWrapper, 然后序列化 封装到 TaskConfig, 以 udf 结尾的 配置信息作为 key, 这部分 TaskConfig 是包含在 JobGraph 中的每一个 JobVertex 中的, 然后伴随着 JobGraph 的序列化传递到 JobManager 这边进行处理
  2. JobManager 这边反序列化 JobGraph, 然后创建 JobMaster, 该 JobVertex 经过 ExecutionVertex, TaskDeploymentDescriptor 然后传递到 TaskExecutor
  3. TaskExecutor 这边反序列化 DataSourceTask, ChainedDriver, DataSinkTask 等等, 然后 执行任务

所以这个流程中 JobManager 这边是仅仅是获取, 持有, 传递 udf 部分, 不涉及 反序列化

 

 

driver 这边

从上下文获取 function 对象, 也就是我们驱动代码里面 “new Test01WordCount$MyFlatMapMapper()”, 然后封装了一个 UserCodeObjectWrapper 被 FlatMapOperatorBase 持有 

然后会经历 Plan, OptimizedPlan 然后到 JobVertex 阶段 

ecf48fad7bfd40ce9a620130da7423ca.png

 

然后是创建 JobGraph, 创建每一个 JobVertex 的时候, 序列化该 JobVertex 的 处理函数 

ed0277d759a1493798c9e2274c7b9cf9.png 

然后是将 chainedTask, 的相关配置信息放在 主JobVertex

然后隔离是通过 ”chaining.taskconfig.” + $idx 来进行隔离的, 相当于是增加了一系列的名称空间 

5e36bc327359446e9ff491c27d2f964d.png

 

然后就是 JobGraph 的序列化, 准备发送 http 请求 传输 Job 到 JobManager

e4afe97b2f0f4f579f88a3d772fd5235.png 

 

JobManager 这边 

JobManager 这边反序列化 JobGraph 如下, 这里面和客户端那边一样 

然后 这边的 JobGraph 和 客户端那边的一致, 包含了 JobVertex 中包含了 TaskConfiguration 相关信息 

eb24d5a273fd495fad368ed910e660e8.png

 

然后是到后面封装 TaskDeploymentDescriptor 这里可以看到, 也是间接的从 JobVertex 中获取的 TaskConfiguration

然后 最终的传递是通过 TaskInformation 从 JobMaster 这边传递到 TaskExecutor

eb1086aaef2e4a5aaa12886b02b7b9e6.png

 

TaskExecutor 这边 

反序列化各个 DataSourceTask, ChainedDriver, DataSinkTask 等等的时候

根据索引, 添加前缀, 来获取给定的 ChainedDriver, 然后添加到 chinedTaskTarget 中, 基于 previous 形成了一个单项任务执行的链表, 用于后面的执行 

这里各个任务的前缀为 “chaining.taskconfig” + $idx 和前面放入的时候, 是对称的 

4a7610710a3c44b6857dcce282315ea6.png

 

这里是具体的获取配置的地方, 前缀 + “udf”, 然后从 配置信息中获取配置

2a2af1b797c04762bb07974199c5b7f9.png 

然后是 反序列化 UserCodeObjectWrapper, 里面封装了目标函数, Test01WordCount$MyFlatMapMapper

b8eee5151bcb4b5d8a931ab44f9e7a45.png 

 

完 

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1465454.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

学习Markdown

https://shadows.brumm.af 欢迎使用Markdown编辑器 你好! 这是你第一次使用 Markdown编辑器 所展示的欢迎页。如果你想学习如何使用Markdown编辑器, 可以仔细阅读这篇文章,了解一下Markdown的基本语法知识。 新的改变 我们对Markdown编辑器进行了一些…

第101讲:Mycat分布式数据库代理系统的核心概念以及部署

文章目录 1.Mycat核心概念1.1.Mycat介绍1.2.Mycat的应用场景1.3.Mycat结构概念1.4.Mycat的原理1.5.Mycat管理 2.部署Mycat 1.Mycat核心概念 1.1.Mycat介绍 Mycat是开源的、活跃的、基于JAVA语言编写的MySQL数据库中间件,可以把它看做是一个代理程序,开…

MariaDB落幕和思考

听过MySQL的基本也都知道 MariaDB。MariaDB由MySQL的创始人主导开发,他早前曾以10亿美元的价格,将自己创建的公司MySQL AB卖给了SUN,此后,随着SUN被甲骨文收购,MySQL的所有权也落入Oracle的手中。传闻MySQL的创始人担心…

融中穿刺路径角度评估的C++技术实现

消融模型的三维渲染 我们以肝部为例,通常肝部在做消融手术规划时有几个步骤。 一三维重建: 对器官进行图像分割; 对肿瘤的原发区域GTV进行勾画。 二穿刺路径的规划: 路径规划当中有几个约束:穿刺深度、危及器官的…

普中51单片机(DS18B20温度传感器)

DS18B20温度传感器原理 内部结构 64位(激)光刻只读存储器 光刻ROM中的64位序列号是出厂前被光刻好的,它可以看作是该DS18B20的地址序列号。64位光刻ROM的排列是:开始8位(28H)是产品类型标号,接着的48位是该DS18B20自身…

论文精读--GPT1

把transformer的解码器拿出来,在没有标号的大量文本数据上训练一个语言模型,来获得预训练模型,然后到子任务上微调,得到每个任务所需的分类器 Abstract Natural language understanding comprises a wide range of diverse tasks…

祝贺!湖南天府生态农业有限公司喜获“湖南省生猪核心育种场”授牌

为贯彻落实全国畜禽遗传改良计划,根据《湖南省种业振兴行动实施方案》以及省农业农村厅办公室《关于开展省级种畜禽核心场遴选工作的通知》,湖南省农业农村厅组织省畜禽遗传资源委员会在全省范围内开展了省级畜禽核心育种场遴选工作。 经养殖场申请、市县…

解决SSH远程登录开饭板出现密码错误问题

输入“adduser Zhanggong回车”,使用adduser命令创建开发板用户名为Zhanggong 输入密码“123456” 输入密码“123456”

华清远见作业第四十一天——Qt(第三天)

思维导图: 编程 完善对话框,点击登录对话框,如果账号和密码匹配,则弹出信息对话框,给出提示”登录成功“,提供一个Ok按钮,用户点击Ok后,关闭登录界面,跳转到其他界面 如…

OpenAI Sora视频模型技术原理报告解读

▌01. OpenAI Sora 视频生成模型技术报告总结 •不管是在视频的保真度、长度、稳定性、一致性、分辨率、文字理解等方面。 •技术细节写得比较泛(防止别人模仿)大概就是用视觉块编码(visual patch)的方式,把不同格…

k8s-heml联动harbor 18

将打包的heml包上传到harbor仓库进行管理 创建一个公开的项目来接收传送的heml包 安装helm-push插件: helm plugin install https://github.com/chartmuseum/helm-push (在线安装,要求网速要快或者提供科学上网) 离线安装&…

庖丁解牛-二叉树的遍历

庖丁解牛-二叉树的遍历 〇、前言 01 文章内容 一般提到二叉树的遍历,我们是在说 前序遍历、中序遍历、后序遍历和层序遍历 或者说三序遍历层序遍历,毕竟三序和层序的遍历逻辑相差比较大下面讨论三序遍历的递归方法、非递归方法和非递归迭代的统一方法然…

linux drm mipi dsi lcd 点屏之设备树配置

linux drm mipi dsi lcd 点屏之设备树配置 设备树文档: https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/bindings/display/dsi-controller.yaml https://elixir.bootlin.com/linux/v6.8-rc5/source/Documentation/devicetree/binding…

卫星地面站监测系统仿真

当今世界,大国竞争日趋激烈,国际关系愈发紧张,信息与通信已经是当下高度信息化社会的“命脉”,信息只有经过有效且广泛地传播,才能成为一种有利用价值的资源,产生经济效益、推动社会发展。通信技术在发展的…

C语言运用中断子系统用驱动控制led实验,c语言串口led点灯实验(驱动+应用层)

中断子系统用驱动控制led实验 驱动代码 #include <linux/init.h> #include <linux/module.h>#include<linux/interrupt.h> #include<linux/gpio.h> #include<linux/timer.h>#include<linux/of.h> #include<linux/of_irq.h> #inclu…

QQ防红跳转短网址生成网站完整源码

使用此源码可以生成QQ自动跳转到浏览器的短链接&#xff0c;无视QQ报毒&#xff0c;任意网址均可生成。 全新界面&#xff0c;网站背景图采用Bing随机壁纸 支持生成多种短链接 兼容电脑和手机页面 生成网址记录功能&#xff0c;域名黑名单功能 网站后台可管理数据 安装说明&am…

《图解HTTP》笔记2:http的构成

1&#xff0c;查看浏览器上面一个具体的http请求 浏览器地址栏输入网址&#xff1a;https://news.baidu.com/ 使用浏览器的开发者工具&#xff0c;查看网络中发送和接受的数据。 可以看到输入一个网址&#xff0c;浏览器和服务器进行了很多的交互。&#xff08;绿色部分&#…

【深蓝学院】移动机器人运动规划--第6章 模型预测控制(MPC)与运动规划--笔记

0. Outline 1. Reactive Control&#xff08;反应式控制&#xff09; 控制学中的 “Reactive Control” 通常指的是一种控制策略&#xff0c;它依赖于系统对特定事件或变化的即时反应&#xff0c;而不是按照预定的计划或策略行动。这种控制往往是基于当前的传感器输入来做出决…

盘点自动化汽车生产线设备 数据采集分析联合各设备

1.机器人自动装配线 机器人自动装配线已成为汽车制造业中的常见场景。这些机器人在汽车组装的各个环节发挥关键作用&#xff0c;从焊接和铆接到零部件组装。它们不仅提高了装配速度&#xff0c;还确保了产品的一致性&#xff0c;降低了废品率。 2.3D打印技术 3D打印技术正在汽车…

电商API接口接入|电子商务市场最简单的数据采集方法,你学到了吗?

小刘从某职业院校电子商务专业毕业后&#xff0c;-直在某品牌电商部负责运营工作&#xff0c;近期&#xff0c;同班同学小王邀请小刘加入创业大军&#xff0c;共同开设网店&#xff0c;销售家乡的螃蟹、鲜虾、扇贝等生鲜水产。 运营经验丰富的小刘决定&#xff0c;在创业开始前…