开放式数据湖分析的崛起
数据仓库一直被认为是对结构化数据进行分析的标准,但不能处理非结构化数据,如文本、图像、音频、视频和其他格式。此外,机器学习和人工智能在业务的每个方面都变得很普遍,它们需要访问数据仓库以外的大量数据。
云计算的转变引发了计算和存储的分解,它利用了成本优势,并实现了对来自多个维度的数据的适应性存储。所有这些都导致了一种新的数据平台架构,称为 开放式数据湖分析栈.这个堆栈通过使用开源和开放格式的技术,如Presto和Hudi,解决了传统云数据仓库的挑战。在这篇博客中,你将了解更多关于使用Presto、Hudi和AWS S3的开放式数据湖分析栈。
什么是开放数据湖分析
开放数据湖分析是基于在不需要任何供应商锁定的技术和工具上运行分析的概念,包括许可、数据格式、接口和基础设施。
具体来说,开放数据湖分析栈有四个关键要素。
开源--我们将为开放数据湖分析探索的堆栈中的技术在Apache 2.0许可下是完全开源的。这意味着你可以从最好的创新中受益,不仅仅是来自一个供应商,而是来自整个社区。
开放格式--同时他们不使用任何专有格式。事实上,它支持大多数常见的格式,如JSON、Apache ORC、Apache Parquet和其他。
*开放的接口 -*接口是行业标准的ANSI SQL兼容,标准的JDBC/ODBC驱动可以用来连接到任何报告/仪表盘/笔记本工具。因为它是开源的,所以行业标准的语言条款会继续被加入和扩展。
开放的云-- 该堆栈与云无关,没有存储的情况下,自然与容器相一致,可以在任何云上运行。
为什么开放数据湖分析
开放式数据湖分析允许以更低的成本将结构化和非结构化的数据整合到一个中央存储库中,并消除了运行ETL的复杂性,从而实现高性能,减少运行分析的成本和时间。
- 为你的数据带来计算(计算和存储的解耦)。
- 在治理/交易层的灵活性
- 灵活和低成本地存储结构化和半/非结构化的数据
- 每一层的灵活性--选择最适合你的工作负载/用例的技术
开放数据湖分析栈
现在让我们深入了解堆栈本身和每一层。我们将讨论每一层所解决的问题。
BI/应用工具--数据可视化、数据科学工具
插入你选择的BI/分析应用工具。开放数据湖分析堆栈支持使用JDBC/ODBC驱动,因此你可以根据你的用例和工作量连接Tableau、Looker、preset、jupyter notebook等。
Presto - 数据湖的SQL查询引擎
Presto是一个用于数据湖的并行分布式SQL查询引擎。它能够对数据湖上的大量数据进行交互式的、临时性的分析。有了Presto,你可以查询数据,包括AWS S3、关系型数据库、NoSQL数据库等数据源,以及一些专有的数据存储。
Presto是为高性能的交互式查询而建立的,并在内存中执行
主要特点包括。
-
从1到1000个工作者的高度可扩展性
-
灵活地支持广泛的SQL用例
-
高度可插拔的架构,使得Presto可以很容易地与安全、事件监听器等的定制集成进行扩展。
-
数据源的联盟,特别是通过Presto连接器的数据湖
-
与现有的具有ANSI SQL标准的SQL系统无缝集成
一个完整的Presto部署有一个协调者和多个工作者。查询由一个客户端提交给协调器,如命令行界面(CLI)、BI工具或支持SQL的笔记本。协调器使用元数据和数据分布信息解析、分析并创建最佳查询执行计划。然后,该计划被分配给工人进行处理。这种解耦存储模型的优势在于,Presto能够提供所有数据的单一视图,这些数据已经被聚合到S3这样的数据存储层。
Apache Hudi--开放数据湖中的流交易
传统数据仓库的一个大缺点是保持数据的更新。它需要建立数据集市/立方体,然后从源头到目标集市不断做ETL,导致额外的时间、成本和数据的重复。同样地,数据湖中的数据需要更新和一致,而不需要这种操作的开销。
在你的开放数据湖分析堆栈中的交易层是至关重要的,特别是随着数据量的增长和数据必须更新的频率不断增加。使用像Apache Hudi这样的技术可以解决以下问题。
- 摄取增量数据
- 变化的数据采集,包括插入和删除
- 增量数据处理
- ACID事务
Apache Hudi是Hadoop Upserts Deletes Incrementals的缩写,是一个基于开源的交易层,具有用于分析的存储抽象,由Uber开发。简而言之,Hudi在数据湖中实现了原子性、一致性、隔离性和耐久性(ACID)交易。Hudi使用开放的文件格式Parquet和Avro进行数据存储,并使用内部表格格式,即写时复制和读时合并。
它与Presto有内置的集成,所以你可以查询存储在开放文件格式上的 "Hudi数据集"。
胡迪数据管理
Hudi有一个基于目录结构的表格格式,表格会有分区,这些分区是包含该分区数据文件的文件夹。它具有索引功能,支持快速上载。Hudi有两种表类型,定义了数据的索引和布局方式,定义了底层数据如何暴露给查询。
(图片来源:Apache Hudi)
- 写入时复制(COW)。数据以Parquet文件格式(列式存储)存储,每次新的更新在写入时都会创建一个新版本的文件。更新一组现有的行将导致被更新的行的整个parquet文件的重写。
- 读取时合并(MOR)。数据是以Parquet文件格式(列)和Avro(基于行)文件格式的组合存储的。更新被记录到基于行的delta文件,直到压实,这将产生新版本的columnar文件。
基于这两种表的类型,胡迪提供了三种逻辑视图来查询数据湖的数据。
- 读取优化--查询可以从CoW表中看到最新提交的数据集,从MoR表中看到最新压缩的数据集。
- 递增--查询可以看到在提交/压缩后写到表中的新数据。这有助于建立增量数据管道及其分析。
- 实时--通过合并基于列和行的文件来提供MoR表的最新提交数据。
AWS S3 - 数据湖
数据湖是存储来自不同来源的数据的中心位置,如结构化、半结构化和非结构化的数据,并在对象存储(如AWS S3)上以开放格式存储。
亚马逊简单存储服务(Amazon S3)是实现开放数据湖分析的事实上的集中式存储。
开始使用
如何使用Presto运行开放数据湖分析工作负载来查询S3上的Apache Hudi数据集。
现在你知道了这个堆栈的细节,是时候开始了。在这里,我将快速展示你如何实际使用Presto来查询S3上的Hudi数据集。
通过将Hudi引入数据管道,数据可以从不同的来源(如Kafka和其他数据库)摄入到数据湖中。需要的Hudi表将被创建/更新,数据将根据S3数据湖中的表类型以Parquet或Avro格式存储。之后,商业智能工具/应用程序可以使用Presto查询数据,这将反映数据更新后的结果。
总结
开放式数据湖分析堆栈由于其简单性、灵活性、性能和成本,正被越来越广泛地使用。
组成该堆栈的技术是至关重要的。Presto作为数据湖事实上的SQL查询引擎,加上Hudi的交易支持和变化数据捕获能力,使其成为数据湖分析的强大的开源和开放格式的解决方案,但缺少一个组件是数据湖治理,它允许在S3上更安全地运行查询。AWS最近推出了Lake formation,这是一个针对数据湖的数据治理解决方案,而Ahana,一个针对Presto的管理服务,将Presto与AWS lake formation无缝整合,在你的AWS S3数据湖上运行交互式查询,对数据进行精细化访问。