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