百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

Apache Hudi Timeline Server介绍

cac55 2024-09-29 09:26 70 浏览 0 评论

介绍

Hudi 不依赖任何外部第三方服务(如 Zookeeper),因此易于操作。一切都是独立的,并且不存在必须长期运行的服务器组件。启动一个 Spark 集群,摄取一批数据,一切都完全关闭(如果摄取模式是批处理)。但有时,拥有中央服务可能有助于提高表操作效率。因此 Hudi 有一个中央时间线服务器,它与 Driver 程序节点中的主线程一起运行,以协助定期写入和表服务。本文介绍时间线服务器的内容、它解决什么问题以及它如何使一些核心 Hudi 操作受益。

动机

如简介中所示,Hudi 有一个中央时间线服务器,在驱动程序节点中运行并作为 Rest 服务。它有多种好处,第一个用例是提供 FileSystemView api。

Hudi 的核心是维护一个 TableFileSystemView,它暴露 API 来获取给定数据集的文件状态,驱动程序和执行程序将在写入和表服务生命周期的不同时间点查询该状态。中央时间线服务器维护一个缓存的 FSView,每个 Spark 任务都可以轮询该 FSView,从而避免每个 Spark 任务自己加载 FSView,这些 API 响应延迟非常低。如果没有这些API,每个执行器或 Spark 任务可能必须自己构建 FSview,这将导致过多的重复工作,从而影响延迟。

第二个用例是标记(Marker) 实现。Hudi 维护标记来区分 Spark 任务写入的最终数据文件集与由于 Spark 重试而创建的文件。第一个实现是直接标记,实现简单,但在非常大的范围内,我们发现删除标记花费了太多时间。因此我们引入了基于时间线服务器的标记来解决延迟问题。使用基于时间线服务器的标记,删除延迟仅为几秒钟,而在某些情况下使用直接标记需要 30 多分钟。

文件系统视图

Hudi 的核心是维护一个 TableFileSystemView,它暴露 API 来获取给定数据集的文件状态,驱动程序和执行程序将在写入和表服务生命周期的不同时间点查询该状态。一些众所周知的 API 包括:获取所有文件组的最新基本文件、获取给定分区的最新文件切片、获取最新的合并文件切片(在压缩正在进行时有用)、获取最新的挂起压缩操作、获取替换的文件组 (Clustering和其他替换提交操作)等。

TableFileSystemview 有不同的实现,例如内存中的 FSView、基于元数据的 FSview、RockDBBased FSView、基于可溢出映射的 FSView 等。最常见的是内存和元数据 TableFileSystemView。内存表文件系统视图使用文件系统列表查询 Hudi 时间线和数据文件,并填充服务这些 api 所需的所有内部数据结构。基于元数据的文件系统视图使用元数据表而不是直接文件系统列表。所有这些 FSview 都有内置缓存,这意味着一旦为给定分区加载文件组,后续调用就可以从内存数据结构本身提供服务,而不会产生额外的 I/O。但是所有填充的数据结构(缓存)都必须在时间线发生新更改时(新提交完成时)重新加载,这不可避免。因此来自中央时间线服务器的缓存 FSView 通过减少延迟为我们提供了相当高的价值。

FileSystemView 调用的控制流

先看看在没有时间轴服务器的情况下事情会如何发展。假设我们正在操作一个由 1000 个分区组成的表,每个分区有 100 个文件组。会调用如下API

getLatestBaseFile(String partition, String fileID)

5000 个随机文件组。因此 5000 个随机文件组可以分布在不同的分区上。最简单的选择是在驱动程序本身中执行所有内容。但是整个执行将是串行的,这可能会非常慢。换句话说我们可以在 for 循环中以单线程方式获取 5000 个文件组的最新基本文件,而不利用集群资源。让我们利用 Spark 并行执行来实现,因此驱动程序中的典型调用可能如下所示

engineContext.parallelelize(partitionFileIdPairs)
.map(partitionFileIdPair -> {
Build FileSystemView for partition of interest
Fetch latest base file for the fileId of interest and return
}).collect(Collectors.toList())

由于我们利用 Spark 的并行执行,因此与在驱动程序中执行所有操作相比,这应该会加快速度。但我们确实还有进一步优化的空间。由于我们对分布在 1000 个分区中的 5000 个文件组感兴趣,因此大致对每个分区中的 50 个文件组感兴趣。整个调用中最昂贵的操作是构建 FileSystemView。根据上面的 DAG,我们正在 50 个 Spark 任务(与 50 个文件组相关)中为给定分区构建 FileSystemView。

使用 Timeline Server 控制 FileSystemView 调用的流程

位于中心时间轴服务器在消除实例化 FileSystemView 过程中不必要的延迟方面发挥着至关重要的作用。时间线服务器是一个Rest服务,它在同一节点中运行,并在单独的线程中与驱动程序一起处理。所有 FileSystemView 调用都将由该时间线服务器通过 Rest 调用提供服务。执行器会将 FSview 调用路由到位于中心的时间线服务器并返回结果。由于我们还内置了一个缓存层,因此它们往往非常高效,并且避免了 FSview 的重复实例化以及不必要的 I/O。

继续获取 500 个文件组的最新基本文件的示例。当时间线服务器运行并将存储布局设置为 RemoteFileSystemView 时,它可能如下所示。

engineContext.parallelelize(partitionFileIdPairs)
.map(partitionFileIdPair -> {
Make remote request to Timeline server for latest base file for fileId and partition of interest
Return the value obtained as the response
}).collect(Collectors.toList())

在并行线程中,在时间线服务器(REST SERVICE)内:

Receives the request from 5000 spark tasks.
Serves FSview calls for partition of interest if already loaded and cached.
If not, loads the FS view for the given partition of interest.
Serves the response based on the populated data-structures.

正如我们所看到的通过将调用路由到中央时间线服务器来优化对 FSView api 的调用,该服务器提供来自缓存视图的响应。

getLatestBaseFile()只是一个说明。与此类似大多数 FS 视图调用都会路由到中央时间线服务器,并由缓存的 FS 视图提供服务。

基于元数据的 FS 视图

Hudi为每个数据表都有一个元数据表,用于缓存表中的文件列表。如果启用的话,FSview 也可以从元数据表构建。在这种情况下 FS 视图的实例化基于元数据表的 FILES 分区中的数据。这里我们讨论的是时间轴服务器中使用的 FSview 实现。

我们已经确定了一些调用(例如清理器),其中每个分区都将跨所有 Spark 任务加载,因此我们添加了优化以尽可能使用对元数据表的单个调用来预加载所有分区。当表有 1000 个或更多分区时,这会极大地加快 FS 视图调用延迟。

基于时间线服务器的标记

时间线服务器也用作另一个标记实现,在此之前我们有执行器直接操作的直接标记,我们将在其他博客中讨论这个主题。如果感兴趣可以点击此链接讨论基于时间线服务器的标记。

结论

通常操作 Hudi 不需要任何像 Zookeeper 这样需要单独维护的集中运行服务器。在某种程度上时间线服务器是驱动程序节点中长时间运行的服务,用于避免不必要的 I/O,并通过缓存层为 FSview 调用提供服务。

相关推荐

苹果新macOS、新Mac还没出,但已经有新版虚拟机软件Parallels Desktop 19

自从苹果电脑全面转向ARM架构芯片之后,想在新款Mac电脑上安装Windows或Linux系统,就只能依靠虚拟机软件了,其中ParallelsDesktop应该是比较多Mac用户选择使用的一款,现在...

这个开源神器可快速帮你安装 MacOS 虚拟机

大家好,我是JackTian。安装Windows和Linux操作系统是最熟悉不过的必备技能了。那么,给大家推荐一个非常实用的开源脚本:macos-guest-virtualbox.sh,帮你...

如何在VMware虚拟机上安装运行Mac OS系统??

想在自己的Windows电脑上安装一个MacOS体验一下苹果系统的小伙伴,教程来了!!!一、安装前准备虚拟机运行软件:VMwareWorkstationPro,版本:16.0.0。(可以注册)VM...

效率!MacOS下超级好用的Linux虚拟工具:Lima

对于MacOS用户来说,搭建Linux虚拟环境一直是件让人头疼的事。无论是VirtualBox还是商业的VMware,都显得过于笨重且配置复杂。今天,我们要介绍一个轻巧方便的纯命令行Linux虚拟工具...

普通电脑安装苹果MacOS+Windows10双系统,这次可不是虚拟机

上篇文章中说到,有一朋友因为工作需要,得临时使用苹果系统,笔者给他用VmwareWorkStation安装了一个苹果系统的虚拟机,结果装是装上了,但是发现调整分辨率有点小问题,文件传输也不方便。虽说...

官方证实苹果M1芯片不支持Windows 11

中关村在线消息:近日根据微软官方透露,目前已经确定Windows11不支持运行在苹果M1芯片上,这意味着过往在Mac电脑上安装Windows系统的做法在M1芯片的Mac电脑上并不适用。不过此前有网友...

这可能是 Mac 共享文件最详细的教程了

如果希望让一台Mac访问另一台Mac上的文件,就可以使用Mac的文件共享功能。而且不仅是Mac之间,甚至用iPhone、iPad、WindowsPC都可以访问Mac的共享文件...

在 M1/M2 Mac 上,让 Windows 11 免费“跑”起来

自从苹果在产品中逐步使用自研的M系列芯片淘汰掉英特尔芯片之后,很多事情都发生了改变。作者|KirkMcElhearn和JoshuaLong译者|弯月出品|CSDN(ID:CS...

VMware Workstation克隆虚拟机后修改ip地址和mac地址

VMwareWorkstation克隆虚拟机,登录之后发现,克隆虚拟机不仅用户名相同,连ip地址、mac地址也是相同的,很显然访问相同ip地址的虚拟机是会出现ip地址冲突的。一、修改IP地址这就需要...

VirtualBox7中安装macOS big sur,在windows10&11上「保姆级教程」

macOSBigSur是苹果公司研发的桌面端操作系统,于北京时间2020年6月23日在2020苹果全球开发者大会上发布。BigSur采用全新的精美设计,为主要app如Safari浏览器...

最强mac虚拟机Parallels Desktop 16 有哪些重要的新增功能?

ParallelsDesktop16正式发布,软件带来了一些显着的新功能和性能增强,包括对macOSBigSur的全面支持。当苹果推出macOSBigSur时,它终止了对Par...

关于在MacOS安装虚拟机的全过程(macos 安装虚拟机)

哈喽大家好,我是咕噜美乐蒂,很高兴又见面啦!下面美乐蒂将详细地给大家介绍一下在macOS上使用VMwareFusion创建虚拟机并安装操作系统的步骤:一、确认虚拟化支持:首先,确认你的Ma...

macOS上也能轻松运行Win系统的虚拟机,你还不知道吗?

在macOS系统上运行Win系统的方式,虚拟机篇吉安光头强原创你是否曾经为了在Mac上运行Windows系统而烦恼不用着急,下面我将分享一种简单易行的方法,让你轻松在Mac上运行Windows系统准备...

Mac M芯片上安装统信UOS 1070arm64虚拟机

原文链接:MacM芯片上安装统信UOS1070arm64虚拟机Hello,大家好啊!今天给大家带来一篇关于如何在苹果M系列芯片的Mac电脑上,通过VMware安装ARM64版统信UOS1070...

虚拟机不好用?Mac mini 多配一台Windows电脑,用远程桌面更好!

最近新入手了MacminiM4款,这里来更新一下相关问题,对于还没有购买Macmini,但是又想要用苹果电脑的朋友,一些参考,我觉得还是挺有用的!Macmini选择哪个渠道购买好?现在比较划算...

取消回复欢迎 发表评论: