【Flink架构】关于FLink BLOB的组织架构:FLIP-19: Improved BLOB storage architecture:官网解读

文章目录

  • 一. BlobServer架构
    • 1.BlobClient
    • 2. BlobServer
    • 3. BlobCache
    • 4. LibraryCacheManager
  • 二、BLOB的生命周期
    • 1. 分阶段清理
    • 2. BlobCache的生命周期
    • 3. BlobServer
  • 三、文件上下载流程
    • 1. BlobCache 下载
    • 2. BlobServer 上传
    • 3. BlobServer 下载
  • 四. Flink中支持的BLOB文件类型
    • 1. BLOB文件类型
    • 2. 按存储特性又分为两类
  • 五. Use Cases Details
    • 1. Jar 文件
    • 2. RPC 消息
    • 3. 日志
  • 六、相关参数

一. BlobServer架构

BlobServer是jobmanager的组件, 是一个用来管理二进制大文件的服务,比如保存用户上传的jar文件,该服务会将其写到磁盘上。还有一些相关的类,如BlobCache,用于TaskManager向JobManager下载用户的jar文件。

如下blob-store-architecture:
在这里插入图片描述

 

1.BlobClient

  1. 提供上传和下载的接口
  2. 与BlobServer进行通讯

 

2. BlobServer

  1. 提供了基于jobId和BlobKey进行文件上传和下载的方法;
  2. 本地、HA 分布式文件系统的读写:基于<path>/<jobId>/<BlobKey>目录结构,进行HA恢复中,下载分布式系统中的文件到本地文件系统中;
  3. 负责本地和HA系统的清理工作
  4. 先存到本地,然后(如有需要)上传到HA(可能并行进行,确认之前等待两者完成)
  5. 文件下载只能通过本地文件系统中
  6. 恢复时,从HA下载所需文件到本地,并负责清理此路径下所有问题。

 

3. BlobCache

  1. 提供BlobServer文件(基于jobId和BlobKey)的缓存
  2. 提供(基于<path>/<jobId>/<BlobKey>目录结构 )本地文件的读写权限
  3. HA store的读权限
  4. 能够从HA store or BlobServer下载文件
  5. 负责清除本地文件

 

4. LibraryCacheManager

桥接task的classloader和BlobCache中缓存的库BLOB(即 jar 文件),其registerJob,registerTask会构建并缓存job,task运行需要的classloader。

 

二、BLOB的生命周期

BlobCache 对其所有 BLOB 进行引用计数,并在 “blob.retention.interval” 秒后开始删除未被引用的文件。每个子目录与其各自的 BLOB 一起进行引用计数,并将以类似的方式进行删除。请注意,BlobCache 目前没有关于作业进入最终状态的信息,因此只能依靠引用计数来删除作业的 BLOB。

在 TaskManager 关闭时,我们可以清理子目录 <jobId>中的任何剩余文件。

BlobServer 将使用相同的引用计数技术,并适当地从本地和 HA 存储中删除文件。此外,它将通过了解作业何时进入最终状态来增加安全保障。在这种情况下,将删除作业的 BLOB 存储目录(本地和 HA),即 “/”,包括其所有的 BLOB 文件。

 

1. 分阶段清理

场景描述

直到 Flink 1.3,在 LibraryCacheManager 中,我们每小时运行一次定期清理任务(参见library-cache-manager.cleanup.interval参数),删除任何未被引用的 jar 文件。如果作业的任务在清理开始之前失败,后续的恢复可能无法再访问缓存的文件。我们希望通过 “分阶段清理” 来改变这一点。

分阶段清理逻辑

  • 在分阶段清理中,只有当(周期性的)清理任务第二次遇到此 BLOB 时,才会删除 BLOB 文件,例如通过拥有两个清理列表:一个用于实际清理,即 “立即删除”,一个用于分阶段文件,即 “下次删除”。
  • 每次清理任务运行时,将删除实际清理列表(和文件),并将分阶段列表变为实际列表。这比为每个未被引用的 jar 设置存活时间的花销要小,并且对于当前的清理任务来说足够了。因此,(目前)未被引用的 BLOB 将至少保留 “blob.retention.interval” 秒,最多两倍于此数量。

 

2. BlobCache的生命周期

  1. 所有的 BLOB 都是引用计数的,从第一次检索/传递 BLOB 开始计数。
  2. 特定于作业的 BLOB子目录也会随着每个与作业相关的文件一起进行引用计数。
  3. 如果引用计数为 0,则该 BLOB 将进入分阶段清理(见上文)。
  4. 如果任务成功、失败或被取消,其所有 BLOB 的引用计数将适当地递减(如果可能)。 当 BlobCache 关闭时,即 TaskManager 退出时,应删除所有的 BLOB。

请注意,运行在同一 TaskManager 上的多个任务可能使用同一作业的BLOB 文件!

 

3. BlobServer

BlobServer 中存储的所有未使用的 BLOB 文件也应定期清理,而不仅仅是在 BlobServer 关闭时(自 Flink 1.3 起)。

  1. 所有的 BLOB 都是引用计数的,从初始上传开始计数。
  2. 特定于作业的 BLOB 子目录 (<path>/<jobId>)不进行引用计数。
  3. 两种类型的 BLOB 生命周期保证:HA(用于恢复保留)和非-HA(可重新创建文件,不用于恢复)。
  4. 如果作业失败,则所有非-HA 文件的引用计数将重置为 0;所有 HA 文件的引用计数保持不变,并且在恢复时不会再次增加。
  5. 如果作业进入最终状态,即完成或取消,作业特定的 BLOB 子目录 (<path>/<jobId>) 及其所有的 BLOB 将立即被删除,并从引用计数中移除(尽管实际的引用计数可能不为 0)。
  6. 如果引用计数为 0,则该 BLOB 将进入分阶段清理(见上文)。
  7. 当BlobServer 退出时,应删除所有的 BLOB。

注意,与特定于作业的 BLOB 目录一起,jar 文件通常会被删除,而短期存在的BLOB,如 RPC 消息或日志,主要基于引用计数进行删除。作业目录删除充当了它们的安全保障,以防引用计数出错。

 

三、文件上下载流程

1. BlobCache 下载

BlobCache的下载流程

当请求特定于作业 ID 和 BlobKey 的文件时,

  1. BlobCache 首先会尝试从其本地存储中提供该文件(在成功的校验和验证后)。
  2. 如果在本地存储中找不到文件或者校验和不匹配,文件将从 HA 存储复制到本地存储(如果可用)。
  3. 如果这种方法不起作用或者不可用,将使用通过 BlobClient 建立和管理的连接,从 BlobServer 直接下载到本地存储中。

在传输过程中,这些文件将被放入临时目录,并且只有在完全传输和校验和验证后才会提交到特定于作业的路径。

HOW:这可能会为同一文件触发多个(并发)下载,但确保在提供 BLOB 时不会使用不完整的文件。我们可以通过 BlobCache 阻止这样的多次下载作为优化。

 

2. BlobServer 上传

注意:

在上传用户 jar 文件时,相应的作业尚未提交,因此我们无法将 jar 文件绑定到不存在的作业生命周期。
 
这里可以提供思路:为什么flink本地临时jar不会被删除。

 

确保在上传和作业提交之间的客户端中止/崩溃期间的正确清理。

我们不能一次性上传每个文件并使用引用计数器为 0,因为在启动作业时,某些文件可能已经被删除。相反,我们将一起上传所有 jar 文件,并仅在收到最后一个文件后,将它们全部放入分阶段清理的分阶段列表中。然后作业需要在 “blob.retention.interval” 秒内提交,否则我们无法保证 jar 文件仍然存在。

 

3. BlobServer 下载

与 BlobCache 类似,我们首先尝试从本地存储中提供文件(经过校验和验证),如果文件不存在,则从 HA 存储中创建本地副本(如果可用) 。

 

四. Flink中支持的BLOB文件类型

1. BLOB文件类型

  • jar包: 被user classloader使用的jar包
  • 高负荷RPC消息
    1. RPC消息长度超出了akka.framesize的大小
    2. 在HA摸式中,利用底层分布式文件系统分发单个高负荷RPC消息,比如:TaskDeploymentDescriptor。
    3. 失败导致重新部署过程中复用RPC消息
  • TaskManager的日志文件: 为了在web ui上展示taskmanager的日志

2. 按存储特性又分为两类

  • PERMANENT_BLOB: 生命周期和job的生命周期一致,并且是可恢复的。会上传到BlobStore分布式文件系统中。
  • TRANSIENT_BLOB:生命周期由用户自行管理,并且是不可恢复的。不会上传到BlobStore分布式文件系统中。

 

五. Use Cases Details

1. Jar 文件

在作业提交客户端提交作业之前,用户代码的 jar 文件会被上传。成功上传所有 jar 文件后,作业将被提交,JobManager/Dispatcher 将 BlobServer 上的引用计数增加 1。当作业进入最终状态时,引用计数将减少,此时将删除 目录。BlobCache 只需要在其本地存储中引用计数 jar 文件,不需要进一步交互。

 

2. RPC 消息

ing

3. 日志

目前日志文件仅由 Web 用户界面(Web-UI)用于显示 TaskManager 日志。它们在请求后下载并提供服务。每次下载应该将先前日志的引用计数减少 1,并将新日志的引用计数增加 1。日志具有非 HA 生命周期保证,甚至可以立即删除,而不是将它们放入分阶段清理中。
作为优化,我们可以支持将日志文件分区(即字节 xxxx-yyyy)作为 BLOB 上传,并在 WebUI 中使用它们,而不是一遍又一遍地传输相同的日志部分。然而,这与 BLOB 存储无关,并且受到上述体系结构的支持。

 

六、相关参数

参数默认值描述
high-availability.storageDirHA BlobStore根目录
blob.storage.directory<java.io.tmpdir>BlobServer 本地文件根目录
blob.fetch.num-concurrent50BlobServer fetch文件的最大并行度
blob.fetch.backlog1000允许最大的排队等待链接数
blob.service.cleanup.interval3600BlobServer cleanup 线程运行的间隔
blob.fetch.retries5从BlobServer下载文件错误重试次数
blob.server.port0BlobServer端口范围
blob.offload.minsize1024 * 1024运行通过BlobServer传递的最小消息大小
classloader.resolve-orderchild-firstclassloader类加载顺序

 

参考:
https://cwiki.apache.org/confluence/display/FLINK/FLIP-19:+Improved+BLOB+storage+architecture

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

SPI机制详解

在上一篇 gRPC源码剖析-Server启动流程 有提到过SPI机制&#xff0c;SPI对于大多数业务开发人员可能并不熟悉&#xff0c;但是在各底层基础框架中用得还是比较多的&#xff0c;今天我们来详细了解一下。 一、SPI机制 SPI&#xff0c;全称是Service Provider Interface,就是为…

微软正在改进其AI驱动的Copilot在Microsoft Teams中的工作方式,为会议聊天、总结等引入了新的召唤助手方式

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

【spring】@Value注解学习

Value介绍 Value 是 Spring 框架中一个非常有用的注解&#xff0c;它允许你将来自配置文件、系统属性、环境变量或者通过 SpEL&#xff08;Spring Expression Language&#xff09;表达式计算得出的值注入到 Spring 管理的 Bean 中。这个注解可以用在字段、setter 方法或者构造…

自动化面试常见算法题!

1、实现一个数字的反转&#xff0c;比如输入12345&#xff0c;输出54321 num 12345 num_str str(num) reversed_num_str num_str[::-1] reversed_num int(reversed_num_str) print(reversed_num) # 输出 54321代码解析&#xff1a;首先将输入的数字转换为字符串&#xff…

【研发日记】Matlab/Simulink开箱报告(十)——Signal Routing模块模块

文章目录 前言 Signal Routing模块 虚拟模块和虚拟信号 Mux和Demux Vector Concatenate和Selector Bus Creator和Bus Selector 分析和应用 总结 前言 见《开箱报告&#xff0c;Simulink Toolbox库模块使用指南&#xff08;五&#xff09;——S-Fuction模块(C MEX S-Fun…

python学习15:python中的input语句

python中的input语句 我们前面学习过print语句&#xff0c;可以将内容输出到屏幕上&#xff1b;在python中&#xff0c;与之对应的还有一个input语句&#xff0c;用来获取键盘输入。 数据输出&#xff1a;print 数据输入&#xff1a;input 使用上也很简单&#xff1a; 使用inp…

LIS、LCS算法模型

文章目录 1.LCS算法模型2.LIS算法模型 1.LCS算法模型 LCS问题就是给定两个序列A和B&#xff0c;求他们最长的公共子序列。 在求解时&#xff0c;我们会设dp[i][j]表示为A[1 ~ i]序列和B[1 ~ j]序列中&#xff08;不规定结尾&#xff09;的最长子序列的长度。 if(a[i]b[i]) dp…

信号处理--情绪分类数据集DEAP预处理(python版)

关于 DEAP数据集是一个常用的情绪分类公共数据&#xff0c;在日常研究中经常被使用到。如何合理地预处理DEAP数据集&#xff0c;对于后端任务的成功与否&#xff0c;非常重要。本文主要介绍DEAP数据集的预处理流程。 工具 图片来源&#xff1a;DEAP: A Dataset for Emotion A…

从零开始为香橙派orangepi zero 3移植主线linux——1.uboot

从零开始为香橙派orangepi zero 3移植主线linux——1.uboot 0.前言一、准备二、制作引导文件1.BL312.SCP firmware (Crust)3.uboot 三、烧录四、运行 0.前言 之前买了块香橙派zero3&#xff0c;CPU是全志H618&#xff0c;四核cortex-A53&#xff0c;烧录了官方的ubuntu系统后就…

《论文阅读》PAGE:一个用于会话情绪原因蕴含基于位置感知的图模型 ICASSP 2023

《论文阅读》PAGE&#xff1a;一个用于会话情绪原因蕴含基于位置感知的图模型 ICASSP 2023 前言 简介任务定义模型构架Utterances Encoding with EmotionPosition-aware GraphCausal Classifier实验结果 前言 亲身阅读感受分享&#xff0c;细节画图解释&#xff0c;再也不用担…

2024年腾讯云4核8G服务器多少钱一年?买1年送3个月

2024年腾讯云4核8G服务器租用优惠价格&#xff1a;轻量应用服务器4核8G12M带宽646元15个月&#xff0c;CVM云服务器S5实例优惠价格1437.24元买一年送3个月&#xff0c;腾讯云4核8G服务器活动页面 txybk.com/go/txy 活动链接打开如下图&#xff1a; 腾讯云4核8G服务器优惠价格 轻…

【深度学习】【机器学习】用神经网络进行入侵检测,NSL-KDD数据集,基于机器学习(深度学习)判断网络入侵

文章目录 下载数据集NSL-KDD数据集介绍输入的41个特征输出的含义数据处理&&训练技巧建神经网络&#xff0c;输入41个特征&#xff0c;输出是那种类别的攻击模型训练模型推理写gradio前端界面&#xff0c;用户自己输入41个特征&#xff0c;后端用模型推理计算后显示出是…

微服务(基础篇-006-Docker)

Docker是一个开源的应用容器引擎&#xff0c;它让开发者可以打包他们的应用以及依赖包到一个可移植的容器中&#xff0c;然后发布到任何Linux机器上&#xff0c;也可以实现虚拟化。容器是完全使用沙箱机制&#xff0c;相互之间没有任何接口&#xff08;类似 iPhone 的 app&…

【OpenCV】 OpenCV (C++) 与 OpenCvSharp (C#) 之间数据通信

OpenCV是一个基于Apache2.0许可&#xff08;开源&#xff09;发行的跨平台计算机视觉和机器学习软件库&#xff0c;可以运行在Linux、Windows、Android和Mac OS操作系统上。 它轻量级而且高效——由一系列 C 函数和少量 C 类构成&#xff0c;同时提供了Python、Ruby、MATLAB等语…

阿里云实时计算Flink的产品化思考与实践【上】

摘要&#xff1a;本文整理自阿里云高级产品专家黄鹏程和阿里云技术专家陈婧敏在 FFA 2023 平台建设专场中的分享。内容主要为以下五部分&#xff1a; 阿里云实时计算 Flink 简介产品化思考产品化实践SQL 产品化思考及实践展望 该主题由黄鹏程和陈婧敏共同完成&#xff0c;前半程…

BaseDao封装JavaWeb的增删改查

目录 什么是BaseDao&#xff1f; 为什么需要BaseDao&#xff1f; BaseDao的实现逻辑 什么是BaseDao&#xff1f; Basedao 是一种基于数据访问对象&#xff08;Data Access Object&#xff09;模式的设计方法。它是一个用于处理数据库操作的基础类&#xff0c;负责封装数据库…

Adobe推出20多个,企业版生成式AI定制、微调服务

3月27日&#xff0c;全球多媒体领导者Adobe在拉斯维加斯召开“Summit 2024”大会&#xff0c;重磅推出了Firefly Services。 Firefly Services提供了20 多个生成式AI和创意API服务&#xff0c;支持企业自有数据对模型进行定制、微调&#xff0c;同时可以与PS、Illustrator、Ex…

高级DBA带你处理MySQL客户端程序频繁访问MYSQL数据库并错误链接不释放导致连接数爆满事故实战

高级DBA带你处理MySQL客户端程序频繁访问MYSQL数据库并错误链接不释放导致连接数爆满事故实战 一、生产事故描述 Mysql生产数据库最大连接数爆满&#xff0c;其余客户端也同样拿不到数据库连接&#xff0c;生产异常&#xff0c;数据传输失败&#xff01; 报错如下&#xff1a…

架构师之路--Docker的技术学习路径

Docker 的技术学习路径 一、引言 Docker 是一个开源的应用容器引擎&#xff0c;它可以让开发者将应用程序及其依赖包打包成一个可移植的容器&#xff0c;然后在任何支持 Docker 的操作系统上运行。Docker 具有轻量级、快速部署、可移植性强等优点&#xff0c;因此在现代软件开…

解决kubesphere流水线docker登陆错误http: server gave HTTP response to HTTPS client

kubesphere DevOps流水线中&#xff0c;在登录私有的harbor仓库时&#xff0c;报以下错误 docker login 111.230.19.120:80 -u admin -p test123. WARNING! Using --password via the CLI is insecure. Use --password-stdin. Error response from daemon: Get "https://…