06 flink 的各个角色的交互

前言

这里主要是 涉及到 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 

 

完 

 

 

 

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【Maven】介绍、下载及安装、集成IDEA

目录 一、什么是Maven Maven的作用 Maven模型 Maven仓库 二、下载及安装 三、IDEA集成Maven 1、POM配置详解 2、配置Maven环境 局部配置 全局设置 四、创建Maven项目 五、Maven坐标详解 六、导入Maven项目 方式1:使用Maven面板,快速导入项目 …

安装 Debian

安装 Debian 制作一个 Debian 的可启动 USB先决条件如何在 Linux 操作系统上制作 Debian 11 的可启动 USB第一步:附加 ISO 镜像第二步:选择 USB第三步:开始制作 USB 可启动的过程 如何在 Windows 上制作一个 Debian 11 可启动的 USB 盘第一步…

一周学会Django5 Python Web开发-Django5设置视图响应状态

锋哥原创的Python Web开发 Django5视频教程: 2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~_哔哩哔哩_bilibili2024版 Django5 Python web开发 视频教程(无废话版) 玩命更新中~共计25条视频,包括:2024版 Django5 Python we…

压缩感知(Compressed Sensing)的MATLAB仿真实现

在前一篇文章:正交匹配追踪(Orthogonal Matching Pursuit, OMP)的MATLAB实现中,我们介绍了针对稀疏信号进行压缩感知的MATLAB仿真。 本篇我们介绍一下针对的是原始的非稀疏信号,看看如何进行处理。 本文中,…

定制学习风格、满足多元需求:Mr. Ranedeer 帮你打造 AI 家教 | 开源日报 No.178

JushBJJ/Mr.-Ranedeer-AI-Tutor Stars: 20.4k License: NOASSERTION Mr. Ranedeer 是一个个性化的 AI 辅导项目,主要功能包括使用 GPT-4 生成定制化提示,为用户提供个性化学习体验。其核心优势和特点包括: 调整知识深度以满足学习需求定制学…

原生 复选框 input[type=“checkbox“] 样式修改

样式: input[type"checkbox"] {position: relative;width: 25px;height: 25px;/* 用于控制 UI 控件的基于操作系统主题的原生外观。none 隐藏部件的某些特性 */appearance: none; }input[type"checkbox"]::before {content: "";posi…

采用uniapp实现的银行卡卡片, 支持H5和微信小程序

采用uniapp-vue3实现的银行卡卡片 支持H5、微信小程序(其他小程序未测试过,可自行尝试) 可用于参考学习 可到插件市场下载尝试: https://ext.dcloud.net.cn/plugin?id16736 使用示例

ansible的剧本

1 playbook 剧本 1.1 playbooks的组成 Tasks 任务,即通过 task 调用 ansible 的模板将多个操作组织在一个 playbook 中运行 Variables 变量 Templates 模板 Handlers 处理器,当changed状态条件满足时,(notify&#xff09…

“TypeError: utils request jS WEBPACK IMPORTED MODULE O .default is undefined‘报错

写项目时报下列错误,找了半天,结果才发现自己在request.js中少写了一行代码 一定不要少些代码 export default requestrequest.js完整代码 import axios from axios;//创建一个新的axios对象 const request axios.create({baseURL:http://localhost:…

AIDL的工作原理与使用示例 跨进程通信 远程方法调用RPC

AIDL的介绍与使用 AIDL(Android Interface Definition Language)是Android中用于定义客户端和服务端之间通信接口的一种接口定义语言。它允许你定义客户端和服务的通信协议,用于在不同的进程间或同一进程的不同组件间进行数据传递。AIDL通过…

SpringCloud Ribbon负载均衡的策略总结及其配置

1. 轮询策略 2. 权重轮询策略 3. 随机策略 4. 最少并发数策略 5. 在选定的负载均衡策略基础上重试机制 6. 可用性敏感策略。 7. 区域敏感策略 —————————————————————— Ribbon负载均衡策略的配置: 在application.yml中配置如下&am…

功能问题:如何开发一个自己的 VS Code 插件?

大家好,我是大澈! 本文约1100字,整篇阅读大约需要3分钟。 感谢关注微信公众号:“程序员大澈”,免费领取"面试礼包"一份,然后免费加入问答群,从此让解决问题的你不再孤单&#xff01…

linuxshell日常脚本命令之sleep延时

shell之sleep指定延时单位(六) 用于延时打印或延时在超算投放任务 for i in $(seq 1 10);do echo $i;sleep 2m;done

机器学习面试:逻辑回归与朴素贝叶斯区别

逻辑回归与朴素贝叶斯区别有以下几个方面: (1)逻辑回归是判别模型,朴素贝叶斯是生成模型,所以生成和判别的所有区别它们都有。 (2)朴素贝叶斯属于贝叶斯,逻辑回归是最大似然,两种概率哲学间的区别。 (3)朴素贝叶斯需要条件独立假设…

Day10_面向对象-抽象类-接口-课后练习-参考答案

文章目录 代码编程题第1题第2题第3题 代码编程题 第1题 知识点:抽象类语法点:继承,抽象类按步骤编写代码,效果如图所示: 编写步骤: 定义抽象类A,抽象类B继承A,普通类C继承BA类中&…

IDEA 2021.3激活

1、打开idea,在设置中查找Settings/Preferences… -> Plugins 内手动添加第三方插件仓库地址:https://plugins.zhile.io搜索:IDE Eval Reset 插件进行安装。应用和使用,如图

迈向三维:vue3+Cesium.js三维WebGIS项目实战--持续更新中

写在前面:随着市场对数字孪生的需求日益增多,对于前端从业者的能力从对框架vue、react的要求,逐步扩展到2D、3D空间的交互,为用户提供更紧密的立体交互。近年来前端对GIS的需求日益增多。本文将记录WebGIS的学习之旅,从…

Vue3-组合式Api(重点)

阅读文章你可以收获的知识 1.知道setup语法糖的使用和如何实现的 2.知道在vue3中如何定义响应式数据 3.知道在vue3中如何定义一个计算属性(computed) 4.知道如何在vue3中使用watch来监听数据 5.知道在vue3如何实现父子通信 6.知道vue3如何使用ref函…

前端架构: 脚手架之Chalk和Chalk-CLI使用教程

Chalk Chalk 是粉笔的意思, 它想表达的是,给我们的命令行中的文本添加颜色类似彩色粉笔的功能 在官方文档当中,它的 Highlights 核心特性 Expressive API Highly performant No dependencies Ability to nest styles 256/Truecolor color support Auto-…

dell r740服务器黄灯闪烁维修现场解决

1:首先看一下这款DELL非常主力的PowerEdge R740服务器长啥样,不得不说就外观来说自从IBM抛弃System X系列服务器后,也就戴尔这个外观看的比较顺眼。 图一:是DELL R740前视图(这款是8盘机型) 图二&#xff…