什么是数据湖?
数据湖是存储结构化和非结构化信息的地方,通常以文件或 blob 的形式存在。您可以将数据湖视为所有数据的倾倒场,无论其结构、格式或预期用途如何。 “湖”这个概念很大程度上是营销术语,但这种水生生物的比较源于数据湖中的信息以比更僵化和分层的数据仓库更“自然”的状态流动。而且由于它们可以存储不需要遵循特定模式的原始数据,因此数据湖在扩展以存储大量信息(达到 PB 级)时通常具有成本效益。
由于无需在一开始就定义模式,因此数据湖的设置可能很简单;您可以将数据加载进去以供特定用途,或仅仅是为了将来备用,即使您还不确定需要对其运行哪种查询。然而,一旦设置好,配置使数据湖发挥作用所需的工具可能会变得复杂和昂贵——通常需要数据工程师的专业知识。这些工程师将根据需要设置ETL,甚至在数据湖的某些部分训练机器学习模型。
数据湖依赖于读时模式系统,这意味着数据只有在从数据湖中提取以进行查询时才与模式进行验证,而不是在首次写入时。但这确实意味着从数据湖中提取和利用数据需要更多的工作。而且,仅仅因为数据湖提供了更大的灵活性,并不意味着您应该将所有数据治理抛诸脑后;进入数据湖的信息仍应具有良好的质量,经过清理和标注,以便您的 ETL 或查询引擎(以及因此需要数据的人员)能够充分利用它。
何时使用数据湖
如果您需要分析大量半结构化和/或非结构化信息(例如,如果您是一家物联网公司),那么数据湖可能是一个不错的选择。由于在写入数据时无需强制执行总体模式,因此如果您同时处理许多不同类型的数据源——例如流数据、结构化应用程序数据库、来自物联网设备的数据、社交媒体或网络流量,数据湖也可以是一种有效的解决方案。
最终,具有复杂数据需求的组织可能不会只依赖数据湖或数据仓库(甚至是数据湖仓一体),而是构建可以同时包含两者的数据架构,同时考虑组织的总体战略、使用人员的需求以及这些人需要执行的查询类型。
设置数据湖
假设您想设置一个数据湖。概括地说,过程将是这样的
-
选择云存储提供商。有一些数据湖服务可以帮助您设置所需的各个层和工具,但其核心,“湖”是您的存储层——无论您将结构化和非结构化数据保存在何处(例如在 AWS S3 或 Microsoft Azure 中)。
-
识别您的数据源。它们可以是结构化的(例如应用程序数据库)、半结构化的(例如 XML 或 JSON 文件)或非结构化的(例如社交媒体帖子、图像或文本文档)。
-
清理并从这些来源摄取数据。在此阶段,您将对这些数据源(特别是半结构化和非结构化的)进行标注,添加元数据并根据您可能对这些数据提出的问题对其进行标记和分类。一旦数据被清理,这些标注过的副本将被加载到您的数据湖中,可能采用 Parquet 等列式格式,这种格式更适合分析查询。
-
根据需要创建 ETL 并查询您的数据湖。由于其混合格式和通常非结构化的性质,工程师和数据科学家通常是直接访问数据湖的人。您的数据分析师等人员将通过使用 Presto 或 SparkSQL 等查询引擎查询数据湖,这些引擎在数据湖上运行 ETL,定期对其进行结构化,以便可以通过 SQL 查询数据。这些查询在您数据中经过清理、标注的列式副本上执行,而不是在原始数据源本身上执行(原始数据和清理后的数据都存储在您的数据湖中)。