使用Apache Hudi构建大规模、事务性数据湖

一个近期由Hudi PMC & Uber Senior Engineering Manager Nishith Agarwal分享的Talk

在这里插入图片描述

关于Nishith Agarwal更详细的介绍,主要从事数据方面的工作,包括摄取标准化,数据湖原语等。

在这里插入图片描述

什么是数据湖?数据湖是一个集中式的存储,允许以任意规模存储结构化和非结构化数据。你可以存储原始数据,而不需要先转化为结构化的数据,基于数据湖之上可以运行多种类型的分析,如dashboard、大数据处理的可视化、实时分析、机器学习等。

在这里插入图片描述

接着看看对于构建PB级数据湖有哪些关键的要求

在这里插入图片描述

第一个要求:增量摄取(CDC)

企业中高价值的数据往往存储在OLTP中,例如下图中,users表包含用户ID,国家/地区,修改时间和其他详细信息,但OLTP系统并未针对大批量分析进行优化,因此可能需要引入数据湖。同时一些企业采用备份在线数据库的方式,并将其存储到数据湖中的方法来摄取数据,但这种方式无法扩展,同时它给上游数据库增加了沉重的负担,也导致数据重写的浪费,因此需要一种增量摄取数据的方法。

在这里插入图片描述

第二个要求:Log Event去重

考虑分析大规模时间序列数据的场景,这些事件被写入数据管道,并且数量非常大,可达数十亿,每秒可达百万的量。但流中可能有重复项,可能是由于至少一次(atleast-once)保证,数据管道或客户端失败重试处理等发送了重复的事件,如果不对日志流进行重复处理,则对这些数据集进行的分析会有正确性问题。下图是一个示例日志事件流,其中事件ID为唯一键,带有事件时间和其他有效负载。

在这里插入图片描述

第三个要求:存储管理(自动管理DFS上文件)

我们已经了解了如何摄取数据,那么如何管理数据的存储以扩展整个生态系统呢?其中小文件是个大问题,它们会导致查询引擎的开销并增加文件系统元数据的压力。而如果写入较大的文件,则可能导致摄取延迟增加。一种常见的策略是先摄取小文件,然后再进行合并,这种方法没有标准,并且在某些情况下是非原子行为,会导致一致性问题。无论如何,当我们写小文件并且在合并这些文件之前,查询性能都会受到影响。

在这里插入图片描述

第四个要求:事务写(ACID能力)

传统数据湖在数据写入时的事务性方面做得不太好,但随着越来越多的业务关键处理流程移至数据湖,情况也在发生变化,我们需要一种机制来原子地发布一批数据,即仅保存有效数据,部分失败必须回滚而不会损坏已有数据集。同时查询的结果必须是可重复的,查询端看不到任何部分提取的数据,任何提交的数据都必须可靠地写

### Apache Hudi简介 Apache Hudi 是一种用于管理存储在云对象存储上的大规模表格的数据湖技术[^1]。该框架旨在简化增量数据摄取以及提供高效的更新、删除操作,从而使得数据分析更加实时化。 #### 数据湖框架 数据湖(Data Lake)是指能够以原始格式存储大量结构化和非结构化的数据集合的地方。相比于传统的关系型数据库或数据仓库, 数据湖可以容纳更多种类的数据源并支持更广泛的应用程序访问方式。而像Apache Hudi这样的现代数据湖框架,则进一步增强了这些能力: - **高效写入**:通过优化文件布局和支持批量/流式插入来提高吞吐量。 - **时间旅行查询**:允许用户回溯到特定版本的数据集进行查询。 - **ACID事务保障**:确保多个并发修改之间的一致性和隔离级别。 - **与其他系统的集成度高**:易于与Spark等计算引擎配合工作,并且兼容多种SQL解析器。 #### 特点 以下是Apache Hudi的一些显著特点: - 支持记录级别的插入、更新及删除操作; - 提供了两种主要的表类型——COPY_ON_WRITE 和 MERGE_ON_READ ,分别针对不同的性能需求进行了设计; - 集成了丰富的元数据管理和索引机制以便快速定位所需条目; - 可配置的时间戳字段帮助实现细粒度的历史追踪功能; ```sql -- 创建一个Hudi表的例子 CREATE TABLE hudi_table ( id STRING, name STRING, age INT, ts TIMESTAMP ) USING hudi OPTIONS( 'hoodie.datasource.write.table.type'='MERGE_ON_READ', 'hoodie.datasource.write.precombine.field'='ts' ); ``` #### 使用场景 对于那些希望构建具有低延迟特性的ETL管道的企业来说,Apache Hudi无疑是一个理想的选择。它特别适合于以下几种情况: - 实时分析平台,在这里需要频繁地向现有数据集中添加新信息而不影响整体性能表现; - 当存在大量的重复键值对时(例如日志文件),可以通过覆盖旧副本的方式减少冗余空间占用; - 对于某些业务逻辑复杂的应用场合而言,利用其内置的支持多版本控制的功能可以帮助更好地维护历史变更记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值