数据仓库被认为是对结构化数据执行分析的标准,但它不能处理非结构化数据。包括诸如文本、图像、音频、视频和其他格式的信息。此外机器学习和人工智能在业务的各个方面变得越来越普遍,它们需要访问数据仓库之外的大量信息。
云计算发展引发了计算与存储分离,这利用了成本优势并能够灵活地存储来自多个来源的数据。所有这一切都催生了开放Lakehouse的新数据平台架构。现在通过使用 Presto 和 Apache Hudi 等开源和开放格式技术解决了传统云数据仓库的局限性。
开放的Lakehouse 基于将仓库工作负载引入数据湖的概念。可以对不需要供应商锁定的技术和工具进行分析,包括许可、数据格式、接口和基础设施。包括四个关键要素:
开放Lakehouse允许以较低的成本在中央存储库中整合结构化和半/非结构化数据,并消除运行 ETL 的复杂性。这会带来高性能并减少运行分析的成本和时间。
现在让我们深入了解数据堆栈本身和不同的层并讨论每一层解决什么问题。
可插拔的 BI/分析应用工具。开放数据湖分析栈支持使用 JDBC/ODBC 驱动程序,因此可以根据用例和工作负载连接 Tableau、Looker、preset、jupyter notebook 等。
Presto 是用于数据湖的并行分布式 SQL 查询引擎。它允许对大量数据湖上的数据进行交互式、即席分析。使用 Presto可以查询数据所在的位置,包括 AWS S3、关系数据库、NoSQL 数据库和一些专有数据存储等数据源。Presto 专为具有内存执行的高性能交互式查询而构建,主要特征包括:
Presto 的完整部署有一个Coordinator和多个Worker。查询由客户端(如命令行界面 (CLI)、BI 工具或支持 SQL 的笔记本)提交给Coordinator。Coordinator使用元数据和数据分布信息解析、分析和生成最优查询执行计划。然后将该计划分发给Worker进行处理。这种解耦存储模型的优势在于 Presto 可以提供所有已聚合到 S3 等数据存储层的数据的单一视图。
传统数据仓库的一大缺点是保持数据更新。它需要构建数据集市/多维数据集,然后从源到目标集市进行连续 ETL,从而导致额外的时间、成本和数据重复。同样数据湖中的数据需要更新并保持一致,而无需运营开销。开放 Lakehouse 分析栈中的事务层至关重要,尤其是随着数据量的增加以及必须更新数据的次数不断增加。使用像 Apache Hudi 这样的技术可以解决以下问题:
Apache Hudi 代表 Hadoop Upserts Deletes Incrementals,是一个基于开源的事务层,具有由 Uber 开发的分析存储抽象。简而言之 Hudi 在数据湖中实现了原子性、一致性、隔离性和持久性 (ACID) 事务。Hudi 使用开放文件格式 Parquet 和 Avro 进行数据存储和内部表格格式,称为 Copy-On-Write 和 Merge-On-Read。它与 Presto 内置集成,因此可以查询存储在开放文件格式中的"hudi 数据集"。
Hudi 有一种基于目录结构的表格式,并且该表将具有分区,这些分区是包含该分区的数据文件的文件夹。它具有支持快速更新插入的索引功能。Hudi 有两种表类型,它们定义了数据的索引和布局方式,它们定义了基础数据如何暴露给查询。
基于这两种表类型,Hudi 提供了三种逻辑视图,用于从数据湖中查询数据
数据湖是存储来自不同来源的数据的中心位置,例如结构化、半结构化和非结构化数据,以及 AWS S3 等对象存储的开放格式。Amazon Simple Storage Service (Amazon S3) 是实现开放数据湖分析的事实上的集中式存储。
如何使用 Presto 运行开放数据湖分析工作负载以在 S3 上查询 Apache Hudi 数据集 现在已经了解了栈的详细信息,是时候开始入门了。这里将快速展示如何实际使用 Presto 在 S3 上查询 Hudi 数据集。
可以从不同来源(例如 Kafka 和其他数据库)在数据湖中摄取数据,通过将 Hudi 引入数据管道,将创建/更新所需的 Hudi 表,并且数据将基于表以 Parquet 或 Avro 格式存储输入 S3 数据湖。稍后 BI 工具/应用程序可以使用 Presto 查询数据,这将在数据更新时反映更新的结果。
开放 Lakehouse 分析栈因其简单性、灵活性、性能和成本而得到越来越广泛的应用。构成该栈的技术至关重要。Presto 作为数据湖事实上的 SQL 查询引擎,以及 Hudi 的事务支持和变更数据捕获功能,使其成为数据湖分析的强大开源和开放格式解决方案,但缺少的组件是数据湖治理这允许更安全地在 S3 上运行查询。AWS 最近推出了 Lake Formation,一种用于数据湖的数据治理解决方案和 Ahana,一种 Presto 的托管服务,将 Presto 与 AWS Lake Formation 无缝集成,以在 AWS S3 数据湖上运行交互式查询,并对数据进行细粒度访问。