数据湖已成为当今组织数据管理的重要组成部分。它们提供了一个集中存储库,可以存储任何规模的结构化和非结构化数据。然而,管理数据湖可能是一项具有挑战性的任务,尤其是对于初学者而言。Apache Hudi 是一个开源数据湖管理工具,可以帮助简化此过程。
Apache Hudi 就像一个大盒子,你可以在其中放置所有玩具,但它不是玩具,而是数据。它可以帮助您组织数据,以便您可以轻松找到您想要的玩具。它还可以帮助您不断向盒子添加新玩具而不会弄乱,如果您不喜欢盒子的外观,您可以撤消更改并使其看起来像以前一样。
例如,假设玩具机器人正在探索公园,每次发现一朵新花时,它都会向计算机发送信息。Hudi 将获取玩具机器人发送的所有信息,并根据花的类型、颜色和发现的位置对其进行组织。因此,当您想了解机器人在公园里发现的所有黄色花朵时,您可以轻松地在玩具盒中找到该信息,因为 Hudi 的组织方式如此。
在本初学者指南中,我们将介绍 Apache Hudi 的基础知识以及如何使用它来管理数据湖。
什么是 Apache Hudi?
Apache Hudi(Hadoop Upserts 和 Incrementals 的缩写)是一种可以轻松管理数据湖的工具。它提供了一种统一的方法来存储、管理和查询数据湖中的数据。Hudi 支持批处理和流数据,并支持增量更新、回滚和时间点查询。
为什么使用 Apache Hudi?
Apache Hudi 通过提供一致的数据存储和查询方式来简化数据湖管理。它还允许增量更新,这意味着您可以将新数据添加到数据湖中,而无需完全重写整个数据集。这可以节省大量的时间和资源。
此外,Hudi 支持回滚,这意味着您可以在必要时撤消对数据湖所做的更改。这在出现数据错误或需要恢复数据湖的早期版本时非常有用。
如何使用 Apache Hudi?
使用 Apache Hudi 相对简单。第一步是在 Hadoop 集群上安装 Hudi。这可以使用 Hadoop 包管理器来完成,或者通过下载源代码并自行构建来完成。
安装 Hudi 后,您就可以开始在数据湖中创建表。Hudi 支持多种不同的表类型,包括:
- Hive 管理的表
Hive 管理的表是 Apache Hudi 中由 Hive 数据仓库系统管理的表。这些表的存储格式与传统 Hive 表相同,并且可以使用 HiveQL(Hive 的查询语言)进行查询。这意味着,如果您已经熟悉 Hive,则可以轻松开始在 Apache Hudi 中使用 Hive 管理的表,而无需学习新的查询语言。此外,Hive 管理的表还与使用 Hive 的其他工具和系统兼容,从而可以轻松地将 Hudi 与现有数据基础设施集成。
- 外部表
Apache Hudi 中的外部表是不由 Hudi 本身管理的表。相反,这些表的数据存储在外部位置,例如对象存储或数据湖。表的元数据存储在Hudi中,Hudi提供了查询数据的API。这使您可以继续使用现有的数据存储系统和工具,同时仍然利用 Hudi 的功能,例如增量更新和回滚。
使用外部表的主要优点之一是它允许您保留原始数据文件的本机格式,而无需将它们转换为特定格式。如果您有大量数据已以特定格式存储,并且您不想对其进行转换,那么这会很有用。此外,外部表还可以通过避免重复数据来帮助降低存储成本。
- 基于数据集的表
Apache Hudi 中基于数据集的表是一种基于数据集概念的表。数据集是以特定格式(例如 Avro 或 Parquet)存储的数据集合。可以使用 Hudi 读取 API 查询数据集,并可以使用 Hudi 写入 API 更新数据集。
基于数据集的表提供了在 Apache Hudi 中存储和查询数据的更灵活的方式,因为它们可以支持不同的存储格式、索引和分区选项。它还允许您以针对您的特定用例优化的格式存储数据。
然后,您可以使用 Hudi 写入 API 将数据加载到表中。写入 API 支持多种不同的数据格式,包括 Avro、Parquet 和 JSON。
加载数据后,您可以开始使用 Hudi 读取 API 查询它。读取 API 支持多种不同的查询类型,包括:
- 全表扫描
- 增量查询
- 时间点查询
Hudi 还提供了一个命令行界面,可用于管理和查询数据湖。
使用 Hudi、Kafka 和 GCP 的数据管道示例设计:
使用 Apache Kafka、Apache Hudi 和 Google Cloud Platform (GCP) 的数据管道可以设计如下:
- 数据由各种来源生成并作为记录流发送到 Kafka 主题。
- Kafka Consumer 从主题读取记录流并将其发送到 GCP Cloud Dataflow 作业。
- Cloud Dataflow 作业处理数据并执行任何必要的转换,并将数据写入 GCS 存储桶或 BigQuery 数据集。
- Apache Hudi 配置为使用 GCS 存储桶或 BigQuery 数据集作为数据湖的存储位置。
- Hudi 提供数据管理功能,例如基于 GCS 存储桶或 BigQuery 数据集中存储的数据的数据版本控制、数据压缩和数据查询。
- 数据处理可以使用 GCP 服务完成,例如 Cloud Dataproc、Apache Spark 或 Dataproc 上的 Apache Hive。Hudi 可以与这些服务集成,并提供增量数据读取、基于快照的数据读取和更新插入等功能。
- 处理后的数据可以存储在 GCS 存储桶或 BigQuery 数据集或任何其他存储系统(例如 Cloud Storage 或 Bigtable)中。
- 可以使用 BigQuery、Data Studio 或 Data Studio 等 GCP 服务来可视化数据。
总体而言,此管道允许您实时流式传输数据,使用 Cloud Dataflow 处理数据,并使用 GCP 存储上的 Hudi 进行管理。此外,Hudi的数据管理功能可以提高数据处理和查询的性能,从而可以轻松地使用GCP上的大型数据湖。
Apache Hudi (Hoodie) 支持使用几种不同的查询语言查询存储在数据湖中的数据。最常用的查询语言是:
- SQL:Hudi 支持使用 SQL 查询来查询数据湖中存储的数据。这允许用户使用熟悉的 SQL 语法查询数据,并且还可以轻松地与其他基于 SQL 的工具和框架集成。
- HiveQL:Hudi 支持使用 HiveQL(Hive 查询语言)查询存储在数据湖中的数据。这允许用户使用熟悉的 Hive 语法查询数据,并且还可以轻松地与 Hive 和其他基于 Hive 的工具和框架集成。
- Java API:Hudi 提供了用于查询数据湖中存储的数据的 Java API。这允许开发人员编写 Java 代码来查询数据,并且还可以轻松地与其他基于 Java 的工具和框架集成。
- Spark SQL:Hudi 支持使用 Spark SQL 查询数据湖中存储的数据。这允许用户使用熟悉的 SQL 语法查询数据,并且还可以轻松与 Spark 和其他基于 Spark 的工具和框架集成。
Apache Hudi 和 Apache Spark 的比较:
结论
Apache Hudi 是一个功能强大的工具,可以简化管理数据湖的过程。它提供了一种一致的方式来存储和查询数据,并允许增量更新和回滚。通过遵循本初学者指南,您可以开始使用 Hudi 轻松管理您的数据湖。