Apache Hudi 是什么?

news/2024/5/3 18:16:44/文章来源:https://blog.csdn.net/Shockang/article/details/126825709

前言

本文隶属于专栏《大数据技术体系》,该专栏为笔者原创,引用请注明来源,不足和错误之处请在评论区帮忙指出,谢谢!

本专栏目录结构和参考文献请见大数据技术体系


背景

2016 年,优步开发了 Apache Hudi(一开始叫 Hoodie),这是一个增量处理框架,以低延迟和高效率为业务关键数据管道提供动力。

一年后,优步选择开源该解决方案,允许其他依赖数据的组织利用其优势,然后在 2019年,又进一步推进了这一承诺,将其捐赠给 Apache 软件基金会。

然后,经过一年半后,Apache Hudi 以顶级项目毕业于 Apache 软件基金会。


WHAT

在这里插入图片描述

Apache Hudi 是下一代的实时计算数据湖平台,它在自助的数据存储层上通过增量的数据管道来构建实时计算数据湖,同时也优化了数据湖引擎和离线计算。

Apache Hudi 不仅非常适合实时计算工作负载,还允许创建高效的增量离线计算数据管道。

Apache Hudi 使用插入(upsert)和增量拉取等原语,将流式处理带到了类批处理的大数据中。

这些功能有助于为我们的服务显示更快、更新鲜的数据,统一的服务层具有大约几分钟的数据延迟,避免维护多个系统的任何额外开销。

除了灵活性外,Apache Hudi 可以在 Hadoop 分布式文件系统(HDFS)或云存储上运行。

Hudi 在数据湖上实现了原子性、一致性、隔离性和持久性(ACID)语义。

Hudi 使用最广泛的两个功能是插入(upsert)和增量拉取,这使用户能够吸收更改数据捕获,并将其大规模应用于数据湖。

Hudi 还提供了广泛的可插拔索引功能,为了实现这一目标,自己实现了数据索引。

Hudi 控制和管理数据湖中文件布局的能力,不仅对克服 HDFS 命名节点和其他云存储限制至关重要,而且对于通过提高可靠性和查询性能来维护健康的数据生态系统也非常重要。

为此,Hudi 支持多个查询引擎集成,如 Presto、Apache Hive、Apache Spark 和 Apache Impala。

在这里插入图片描述


特性

  • 通过快速、可插拔的索引实现 upsert/delete
  • 增量查询,记录级别的变更流。
  • 交易、回滚、并发控制。
  • 来自 Spark、Presto、Trino、Hive 等的 SQL 读写
  • 文件大小自动化、数据集群化、文件合并与清理。
  • 流数据的摄取,内置 CDC 数据源和工具。
  • 内置元数据的跟踪,用于可扩展的存储访问。
  • 向后兼容的模式(Schema)升级和实施。

内部细节

在这里插入图片描述

在顶层设计上,Hudi 在概念上分为三个主要组成部分:需要存储的原始数据、用于提供插入(upsert)能力的数据索引以及用于管理数据集的元数据。

在其核心,Hudi 维护着在不同时间点在数据表上执行的所有操作的时间表,称为 instants in Hudi。这提供了数据表的即时视图,同时也有效地支持按到达顺序来检索数据。

Hudi 保证在时间线上执行的操作是原子的,并且基于即时时间,即数据库中变更发生的时间,是一致的。

有了这些信息,Hudi 提供了同一 Hudi 表的不同视图,包括用于快速列存性能的读取优化视图,用于快速数据摄取的实时视图,以及上图所示的将 Hudi 表作为变更日志流读取的增量视图。

Hudi 在分布式文件系统的基本路径下将数据表组织成目录结构。

表被分解为分区,在每个分区中,文件被组织成文件组,由文件 ID 唯一标识。

每个文件组包含几个文件片,其中每个切片包含一个在特定提交/压缩即时时间生成的基础文件(* .parquet),以及一组日志文件( * .log. * ),其中包含自生成基础文件生成以来对基本文件的插入/更新。

Hudi 采用多版本并发控制(MVCC),其中压缩操作合并日志和基础文件以生成新的文件切片,清理操作将删除未使用/旧的文件片以回收文件系统上的空间。

Hudi 支持两种表类型:写时复制(copy-on-write)和读取时合并(merge-on-read)。

写时复制表类型仅使用列式文件格式(例如 Apache Parquet)存储数据。

通过写时复制,通过在写入过程中执行同步合并来简单更新版本并重写文件。

读取合并表类型使用列存(例如 Apache parquet)和基于行存(例如Apache Avro)文件格式的组合存储数据。

更新被记录到增量文件,然后压缩,以同步或异步生成新版本的列存文件。

Hudi 还支持两种查询类型:快照和增量查询。

快照查询是从给定的提交或压缩操作中获取表的“快照”的请求。

当利用快照查询时,写入时复制表类型仅公开最新文件切片中的基本/列存文件,并保证与非 Hudi 表具有相同的列存查询性能。

写时复制为现有的 Parquet 表提供了下拉式替换,同时提供插入/删除和其他功能。

在读取合并表的情况下,快照查询通过实时合并最新文件切片的基文件和增量文件来公开近实时数据(分钟顺序)。

对于写入时复制表,增量查询提供自给定提交或压缩以来写入表的新数据,提供变更流以启用增量数据管道。

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

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

相关文章

自制操作系统日志——第十六天

自制操作系统日志——第十六天 今天我们再接再厉,继续进一步的完成我们的多任务机制。 文章目录自制操作系统日志——第十六天一、多任务自动管理化二、任务休眠设定任务优先级总结一、多任务自动管理化 在昨天我们的多任务都是通过自己手动添加,然后进…

工业4.0 资产管理壳学习笔记(1)

何谓资产? 工业4.0的观点下,资产是任何“对组织具有价值的对象(object which has a value for an organization)”。因此,工业4.0中的资产几乎可以采取任何形式,例如生产系统,产品,软…

Vue基础案例-成绩显示

成绩排序应该按照降序排 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta http-equiv"X-UA-Compatible" content"IEedge"><meta name"viewport" content"widthde…

msm8953 LCD移植详解

一、简介 本文是基于高通msm8953的LCD模块移植说明。LCD移植主要是涉及到LK和kernel部分的修改。 二、实操准备 1、专业术语 HSYNC:行同步信号&#xff0c;表示扫描1行的开始。 VSYNC:帧同步信号,表示扫描1帧的开始&#xff0c;一帧也就是LCD显示的一个画面。 HFP:Horizon …

Linux学习笔记——网络管理

主要涉及Linux网络管理的几个简单指令&#xff0c;主要包括ifconfig、ping、nslookup 获取网络接口的配置信息 可以使用 ifconfig 命令查看网络接口的配置信息 语法 ifconfig [网络设备][down up -allmulti -arp -promisc][add<地址>][del<地址>][<hw<网络…

认识我们的团队:Ed Hertzog

认识我们的团队:Ed HertzogOur team works hard, but they believe in the work they do— hear more from one of our devs below. 了解背后的人 茴香梗 ——在本系列中,我们与 Fennel Labs 团队的成员坐下来了解更多关于他们是谁以及他们做什么的信息。今天,我们一起出去玩…

网络编程-流

流一、概貌1.消息类型二、getmsg和putmsg函数三、getpmsg和putpmsg函数四、ioctl函数五、TPI&#xff1a;传输提供者接口1.TPI时间获取客户程序一、概貌 流在进程和驱动程序(driver)之间提供全双工的连接,如下所示&#xff0c;虽然我们称底部那个方框为驱动程序&#xff0c;它…

02 最优化模型建立方法

1 什么是数学模型 数学模型是关于部分现实世界和为一种特殊目的而作地一个抽象地.简化地结构。 具体就是为了某种目的&#xff0c;用字母.数字及其他数学符号建立起来地等式或不等式以及图表。图像。框图等描述客观事物的特征及内在联系的数学结构表达式。 2.建立数学模型的方…

【Linux---02】CentOS操作系统的说明「简单使用 | 文件目录 | 常用命令」

文章目录1. CentOS的简单使用2. CentOS的文件目录2.1 目录结构2.2 各个目录的含义3. CentOS的常用命令1. CentOS的简单使用 鼠标进入虚拟机的OS&#xff1a;直接点击鼠标左键 鼠标退出虚拟机的OS&#xff1a;ctrl alt 在linux系统上&#xff0c;不使用图形化终端&#xff0c…

蓝牙BLE调试关于NRF connect相关信息分析

简介 nRF Connect是一个强大的通用工具&#xff0c;它允许你扫描和探索你的蓝牙低功耗(以后的蓝牙LE&#xff0c;也称为蓝牙4.0版本的蓝牙规范)设备&#xff0c;并与它们通信。 nRF连接还允许您的iOS设备广告作为一个外围设备&#xff0c;充分支持许多蓝牙SIG采用的配置文件。…

微信小程序在线考试项目开发-用户信息注册登录功能

⭐️⭐️⭐️ 作者&#xff1a;船长在船上 &#x1f6a9;&#x1f6a9;&#x1f6a9; 主页&#xff1a;来访地址船长在船上的博客 &#x1f528;&#x1f528;&#x1f528; 简介&#xff1a;CSDN前端领域优质创作者&#xff0c;资深前端开发工程师&#xff0c;专注前端开发…

ERAT读和写指令(eratre和eratwe)

ERAT管理指令 为了使hypervisor&#xff08;或 “bare-metal” operating system&#xff09;软件可以直接操作ERAT的entries&#xff0c;在A2 core中实现一组nonarchitected的ERAT管理指令。为了防止user和guest模式下的程序影响TLB地址转换和访问控制机制&#xff0c;所有的E…

乐高广告创意50例——创意无砖

乐高的创意不仅仅局限于建造令人惊叹的建筑,或是拍摄定格电影,甚至是重新制作音乐专辑封面和电影海报,它甚至延伸到了广告领域。 与塑料砖一样,乐高可以采用最简单的概念,做出强大、智能且通常诙谐的声明。 从本图库中的精彩平面广告中,你可以看到,典型的乐高广告所采用…

《Python3 网络爬虫开发实战》:灵巧好用的 正则表达式

灵巧好用的 正则表达式 在上一节中&#xff0c;我们已经可以用 requests 来获取网页的源代码&#xff0c;得到 HTML 代码。但我们真正想要的数据是包含在 HTML 代码之中的&#xff0c;怎么才能从 HTML 代码中获取我们想要的信息呢&#xff1f;正则表达式就是其中一个有效的方法…

基于VC++的WEB浏览器的实现

目 录 摘 要 2 1设计题目与要求 2 2系统设计 2 2.1总体设计 2 2.2详细设计 2 2.2.1用户界面设计 3 2.2.2多标签模块设计 6 2.2.3浏览模块设计 6 2.2.4操作按钮模块设计 9 2.2.5页面缩放模块设计 10 2.2.6状态栏模块设计 11 2.2.7收藏夹模块设计 13 2.2.8窗体关闭模块设计 13 2.…

网页设计中蒸汽朋克的美丽例子

即使你不熟悉蒸汽朋克这个词,你无疑已经通过流行文化被介绍到了这种设计现象。蒸汽朋克指的是一种异想天开的风格,这种风格基于对19世纪可能的反乌托邦世界的想象。这听起来可能有点复杂,但这个折衷的类别将H.G.威尔斯的想法与维多利亚时代的设计、工业主义主题、后世界末日…

第3章 基础项目的搭建

3.1 后端项目搭建 3.1.1 gitee下载脚手架 下载地址&#xff1a;https://gitee.com/77jubao2015/springbootdemo 打开浏览器输入以上地址&#xff0c;点击下载即可&#xff0c;如图所示&#xff1a; 3.1.2 把脚手架导入到idea开发工具 步骤01 把下载后的脚手架放到指定位置并解…

数据库基本概念

目录 一、数据库概念 1、数据库的组成 &#xff08;数据为行&#xff0c;字段为列&#xff09; 2、数据库的管理系统&#xff08;DBMS) 二、数据库系统发展史 1、第一代数据库&#xff08;人工管理&#xff09; 2、第二代数据库&#xff08;文件管理&#xff09; 3、第三…

大学SQLServer2012 安装流程+启动+登录+用户的操作

这里写目录标题第一步下载解压的文件第二步骤安装软件第三步执行安装选项执行安装选项1执行安装选项2执行安装选项3 同意条款执行安装选项4配置检测执行安装选项5 下载需求组件执行安装选项6 上面安装完成后执行安装选项需求---关闭防火墙执行安装选项7--重新检测执行安装选项8…

SpringMVC基础:AJAX发送请求

AJAX请求 前面我们讲解了如何向浏览器发送一个JSON格式的数据&#xff0c;那么我们现在来看看如何向服务器请求数据。 Ajax即Asynchronous Javascript And XML&#xff08;异步JavaScript和XML&#xff09;&#xff0c;它的目标就是实现页面中的数据动态更新&#xff0c;而不是…