数据质量管理:数据可靠性与数据质量问题解决之道
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

2.3.2 数据湖:文件级别的操作

数据湖是现代数据系统另一种日益流行的存储和计算选择,它也依赖于高质量的分析型数据来提供最佳结果。

与数据仓库不同,数据湖架构允许“读时模式”访问。这意味着我们可以在准备使用数据时再推断数据的结构。

数据湖是数据仓库的DIY版本,允许团队根据系统需求选择自己想要使用的各种元数据、存储和计算技术。数据湖非常适合希望构建定制化平台的数据团队,通常由少数(或更多)数据工程师提供支持。借助数据湖,数据科学家、机器学习工程师和数据工程师可以从更大的数据池中提取半结构化数据和非结构化数据。

数据湖的概念最早是由软件公司Pentaho的创始人兼前首席技术官James Dixon提出的,他将其描述为“在一个更自然的环境中的一大片水域。数据湖的内容从源头涌入并填满整个湖泊,湖的不同用户都可以来检查、探索或取样”。

非常早期的数据湖主要建立在Apache Hadoop MapReduce和HDFS(Hadoop Distributed File System)上,利用Apache Hive通过SQL引擎来查询数据。在21世纪10年代初期,Apache Spark让数据湖更加稳定,为数据湖中大型数据集的分布式计算提供了一个通用框架。

数据湖的一些通用特征包括:

解耦存储和计算

此功能不仅可以节省大量成本,而且有助于解析并丰富数据以进行实时流式传输和查询。

支持分布式计算

分布式计算有助于提高大规模数据处理的性能,因为它允许更好的分段查询性能、更容错的设计和更佳的并行数据处理能力。

定制化和互操作性

由于其“即插即用”的特性,随着公司数据需求的演进和成熟,数据湖可以让栈中的不同元素轻松地协同工作,从而支持数据平台的可扩展性。

主要基于开源技术进行构建

这有助于降低供应商被锁定的风险并提供强大的定制功能,对于拥有大型数据工程团队的公司来说非常适用。

处理非结构化或弱结构化数据的能力

数据湖可以支持原始数据,这意味着在处理数据时具有更大的灵活性,非常适合数据科学家和数据工程师。使用原始数据可以更好地控制聚合与计算。

支持复杂的非SQL编程模型

与大多数数据仓库不同,数据湖支持Apache Hadoop、Apache Spark、PySpark等高级数据科学和机器学习框架。

虽然数据仓库提供的结构让数据团队可以轻松有效地运用数据(即收集分析洞察并支持机器学习能力),但这种结构会使它们在某些应用程序中不够灵活且成本高昂。另外,数据湖具有无限的灵活性和定制化能力来支持广泛的用例,但随着灵活性的提高,还会出现许多与数据组织和治理相关的其他问题。

以下是数据团队尝试在其数据湖环境中获得更可靠的数据时所面临的一些突出挑战:

数据完整性

数据湖中的资源在文件级别进行操作时无法保证其数据模式。如果你在数据湖中转换数据时对它的模式有些假设,那么你正在进行一种称作“盲目ETL”(blind ETL)的危险操作。由于不可预见的上游变化,转换可能会在任何时候失败。

沼泽化

沼泽化是指数据湖随时间推移产生技术负债和隐性知识的趋势。通常来说,你必须依靠熟练的数据工程师或数据科学家来了解特定数据所在的位置、利益相关方是谁,并预计数据将如何变化。但过于依赖他们会让数据湖变得“沼泽化”,这意味着没人能完成任何工作,因为数据认知所需的学习成本实在是太高了。

更多端点

数据可靠性通常是数据湖中一个更大的挑战,因为人们可以通过更多方式来收集、操作和转换数据。管道中的步骤越多,出错的可能性就越大。

数据湖通常被用作大量非结构化数据的收集点,例如应用程序数据或用于某些机器学习任务而自动生成的数据。这些数据可以在数据湖中保持其原始格式,也可以通过像AW S Glue这样的数据集成层提供给可能会作为上游资源的数据仓库或商业智能工具。

较小的团队可能会使用数据湖作为唯一的数据存储工具,以实现快速移动的目的,而不是依赖强大的基础设施——尽管这种做法的从业者应该始终警惕“数据沼泽”问题。