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