在数据湖仓中进行数据摄取和处理

在上一章中,我们概述了数据湖仓库的架构组件。那一章从鸟瞰的角度介绍了七个层次,并详细描述了这些层次。本章将涵盖数据湖仓库的前两个层次的架构模式:

  1. 数据摄取层
  2. 数据处理层

这两个层次需要一起讨论,因为它们是相互关联的。数据从摄取层传递到处理层。在这两个层次中使用的许多工具和技术是相同的。 本章分为五个部分。我们将首先探讨提取、转换、加载(ETL)和提取、加载、转换(ELT)数据转换模式之间的差异。然后,我们将深入探讨批处理数据的摄取和处理方法。之后,我们将对流数据进行同样的探讨。最后,我们将讨论Lambda架构模式,该模式结合了批处理和流处理。 在本章中,我们将涵盖以下主题:

  1. 批处理数据的摄取和处理
  2. 流处理数据的摄取和处理
  3. 将所有内容整合在一起

摄取和处理批处理数据

让我们首先看一下数据湖仓库的逻辑架构:

前面的图表描绘了七个逻辑层。来自数据提供方的数据需要进行摄取和转换。传统上,有两种批处理数据摄取和转换模式:

  1. ETL
  2. ELT

如果您希望了解它们如何在数据湖仓库中组合进行批处理摄取和处理,了解这些模式是至关重要的。 让我们详细讨论这些模式。

ETL模式与ELT模式的区别

让我们详细讨论这些模式之间的区别。表面上,这些模式可能看起来相似。然而,在它们的理念和用于转换数据的服务方面存在一些差异。

ETL

第一个模式是ETL。以下图表描述了典型的ETL模式:

这个模式包括以下几个阶段:

  1. 提取(Extract):从数据源提取任何数据并加载到临时区域。临时区域是短暂的和临时的:每次批量加载后,临时区域的数据都会被清除。临时区域还确保源与之解耦。ETL工具用于连接到源并将数据拉入临时区域。另一种方法是将数据推送到仓库,然后从中提取和暂存。
  2. 转换(Transform):一旦数据落入临时区域,ETL工具会对数据进行转换。在数据转换的过程中,利用了ETL工具的计算能力。这个过程意味着转换的速度和规模取决于ETL工具的服务器配置。
  3. 加载(Load):一旦数据被转换,它就被加载到服务数据层。这个任务也由ETL工具执行。

从这个过程中可以看出,在ETL模式中,摄取和数据转换服务的责任在于ETL工具。数据库服务不执行任何转换。另一个要注意的点是,ETL工具还与其加载数据的数据库紧密集成。

ELT

第二个模式是ELT。以下图表描述了典型的ELT模式:

这个模式包括以下几个阶段:

  1. 提取(Extract):与ETL模式类似,ELT工具从数据源中提取数据并加载到临时区域。这个临时区域是短暂和临时的。该区域确保源与之解耦。同样,可以是将数据推送或拉入临时区域的方法。
  2. 加载-转换(Load-Transform):一旦数据位于临时区域,使用数据库的计算引擎执行数据转换。从数据库引擎使用的计算能力越多,数据转换过程就越快。

在ELT模式中,摄取的责任在于ELT工具。数据库引擎负责转换和加载数据。这种模式利用数据库引擎的能力执行所需的转换。这种模式在使用Hadoop生态系统进行ELT和基于大规模并行处理(MPP)架构的数据库的数据湖中非常普遍。

在数据湖仓库中进行批处理数据处理

在数据湖仓库中执行的批处理数据处理结合了ETL和ELT模式。它编织了一种称为提取、加载、转换、加载(ELTL)模式的模式。ELTL模式解耦了每个功能。因此,每个功能由一个且仅一个服务来完成。

上面的图表描述了典型的ELTL模式。摄取服务用于将数据摄入到数据湖中。数据湖服务用于持久性地存储数据。随着数据的转换,中间数据集也存储在数据湖中。批处理服务处理数据,并使用数据服务服务向下游提供选择性的数据。数据摄取和处理服务是按需的,并且仅在处理时处于活动状态。让我们深入探讨这个模式。

提取-加载

第一步涉及从数据提供方提取数据并将其加载到数据湖中的原始数据层。与其他模式不同,原始数据存储是持久的。数据在此层中存储更长的时间。数据还保持其自然形式,不进行任何转换。如预期的那样,提取和加载的责任在于摄取服务。摄取服务是按需启动的,并在源数据可供提取时激活。原始数据存储还确保在数据提供方和数据湖之间实现了适当的解耦。

如下图所示,数据可通过推送或拉取方法被摄取到原始数据存储中。推送方法使用文件传输协议(FTP)或使用编程语言(如Python或Java)编写的程序将数据推送到数据湖中。该程序由数据提供方控制,可以定期运行。它将数据提供方的数据推送到数据湖层,并解耦源和数据湖。数据提供方还控制着安全性和要打开的出站网络端口。

另一种采用的方法是拉取方法。正如其名称所示,在拉取方法中,提取-加载工具或程序使用开放数据库连接(ODBC)或Java数据库连接(JDBC)方法连接到数据提供方的数据库。需要打开入站网络端口,以便程序可以连接到数据库。两种方法在下图中都有说明:

现在让我们讨论转换-加载的过程。

转换-加载

ELTL过程中的下一步是进行数据的转换-加载。现代数据工程策略采用分布式计算框架进行数据转换。分布式计算框架已成为用于大数据处理的事实标准技术。分布式数据处理使用并行性以更快且更大规模地处理数据。上图描述了典型的分布式数据处理模式。

下图描述了在批处理数据处理中使用的分布式计算框架:

以下是实施分布式批处理的关键步骤:

  1. 使用适当的分布策略将数据集分发成多个较小的数据集。两种关键的分发策略如下:

    • 哈希分发:哈希分发基于应用于特定列的哈希函数对数据进行分区。
    • 循环分发:在循环分发中,数据被分布到多个分区,然后在没有任何优化的情况下分布到分区。每一行按顺序分配给一个分区。
  2. 一旦使用适当的分发策略分发数据,较大的数据集就会被分割成多个较小的数据集。这时并行处理的魔法发生。每个数据子集都有自己的计算单元。这个专用的计算单元转换该特定的子集。典型的计算单元将分配CPU和内存来处理数据的一个子集。为了加快处理速度,可以根据需要添加更多的计算节点。这个过程称为水平扩展(scale-out)。还可以通过为节点分配更多的内存或更多的CPU核心来增加每个计算单元的计算能力。这个过程称为垂直扩展(scale-up)。

  3. 每个计算节点转换其数据子集并创建一个经过处理的数据集。最后,来自每个计算节点的处理数据集被合并成一个单一的经过处理的数据集。

  4. 分发数据、在不同计算节点之间进行协调,最终合并数据的操作由控制节点执行。

  5. 批处理数据处理服务使用分布式计算框架处理数据,并将其传播到数据湖层中的中间数据存储和处理数据存储。该服务是按需启动的,可以根据需要进行扩展。此外,需要向下游提供服务的任何数据的选择性副本也被加载到服务层。 现在我们已经了解了批处理数据是如何摄取和处理的,让我们学习一下流式数据是如何摄取和处理的。

摄取和处理流式数据

以下图表描述了进行流式数据摄取和处理所需的组件:

现在,让我们通过ELTL过程的视角讨论如何进行流式数据处理。

流式数据源

流式数据是持续不断产生数据的数据源。社交媒体订阅、物联网设备和事件驱动的流程(如刷信用卡)都是流式数据的示例。数据不断产生,流处理的目标是利用这个数据流,尽快获得洞察。流式数据摄取和处理促进了实时分析。这意味着在数据未持久化到磁盘的情况下对数据执行分析。

提取-加载

流数据使用事件发布-订阅服务进行提取。事件发布-订阅服务使您能够创建一个系统,可以将消息或事件发布到各种主题中。它还允许您订阅这些主题进行处理。该服务充当消息中间件,支持水平和垂直扩展。消息存储在主题中供订阅使用。流处理引擎可以访问这些主题并转换事件,如下图所示:

该服务还使消息能够持久化存储在数据湖的原始数据存储部分。该服务确保原始数据的副本被维护,即使从主题中清除数据。

转换-加载

现在,让我们看看如何转换和加载流数据,以便可以提供服务。

一旦数据被摄取到事件发布-订阅服务中,流数据的转换过程有两个阶段:微批处理和执行。 以下图表显示了流如何被转换:

微批

第一个阶段称为微批处理。微批处理是从流中收集小数据集并对该集合进行转换的过程。微批处理策略可以基于时间,例如在规定的一段时间内收集流数据,也可以是基于事件的,即您可以收集流数据直到发生规定的事件。让我们详细讨论每种微批处理方法。

基于时间的微批处理

在基于时间的微批处理过程中,传入的事件根据特定的时间段进行处理。根据事件需要被处理的速度,这个时间窗口可以缩短或延长。当指定的时间窗口过去时,收集在此窗口内的事件被发送到转换加载的下一个阶段:执行阶段。以下图表描述了基于时间的微批处理的过程:

基于时间的微批处理用于处理事件流是连续的,并且没有特定类型事件的关注点。这种微批处理的一个示例可以是在一个特定时期(例如,10秒)内收集具有特定标签的推文。在这个示例中,关注点不是特定的事件,而是在一定时期内(例如,10秒)发生的一系列事件(带有特定标签的推文)。窗口的长度是固定的。基于时间的微批处理有许多变体:

  • 一个滚动窗口在一组固定的时间内收集事件。
  • 一个跳跃窗口在一组固定的时间内收集事件,但窗口也按照预定的周期移动。

基于事件的微批处理

在基于事件的微批处理中,时间段是次要的。微批处理的重点是在感兴趣的事件上。当发生感兴趣的事件时,将为该特定事件或两个感兴趣事件之间的所有事件创建一个微批。这些微批可以在时间上有所变化。以下图表描述了基于事件的微批处理:

基于事件的微批处理用于在遇到感兴趣的事件时执行某个操作。这个微批只能与感兴趣的事件或感兴趣事件之间的所有事件保持一致。让我们看两个例子,说明基于事件的微批处理。

  1. 标记具有不当言论的推文是一种基于事件的微批处理,它只包含一个事件,即感兴趣的事件(包含不当言论的推文)。当这样的事件发生时,会触发对特定推文的操作。
  2. 一个涉及多个事件的基于事件的微批处理的例子是在显示特定营销广告时收集网站上的点击。潜在地,可以将在显示广告期间发生的所有点击归因于该广告。

操作

现在我们已经解释了什么是微批处理,让我们讨论一下你可以在这个微批上执行的各种操作。通常有两种类型的操作,你可以在微批上执行:基于分组的操作和基于事件的操作。

基于分组的操作

顾名思义,基于分组的操作对微批处理中的事件集合应用特定的转换。常见类型的基于分组的操作包括:

  • 过滤:根据特定条件过滤微批处理。
  • 聚合:应用聚合函数,如求和、平均值和均值。
  • 排序:根据特定的排序值对微批处理流进行排序。
  • 连接:将微批处理数据与其他数据集进行连接。

基于事件的操作

基于事件的操作对特定事件执行操作。这可以是简单的操作,比如立即触发某些逻辑,也可以是复杂的操作,比如通过一系列规则运行事件以确定该事件的后续操作,或者将事件通过机器学习模型进行预测或确定结果。在这里需要注意的关键概念是,基于事件的操作是针对一个感兴趣的事件执行的,而不是一组事件。

一旦微批处理被转换,生成的数据集被加载到两个位置。首先,结果数据集的一个副本被加载到数据湖的处理数据存储中。其次,结果数据集的另一个副本被加载到服务数据库中。

将所有内容整合在一起

到目前为止,我们已经涵盖了批处理和流处理的基本要素。现在,让我们将这两种处理方式结合起来,定义Lambda架构模式。

上图描述了Lambda架构模式。Lambda架构模式包括三个层次:批处理层、速度层和服务层。

批处理层

以下图表说明了Lambda架构中的批处理层处理过程:

批处理层处理包括通过批量数据摄取服务使用拉取或推送方法将数据摄取到数据湖的原始数据存储中。一旦数据被摄取到原始数据存储中,就会启动批处理服务。批处理服务利用分布式计算引擎进行更快的数据处理。处理后的数据然后被提供到两个地方。首先,它进入数据湖的处理后数据存储中。然后,它进入服务层中用于下游消费的组件。

速度层

以下图表说明了Lambda架构中的速度层处理过程:

速度层处理流式数据。流式数据通过发布到事件发布服务的主题之一来进行摄取。原始数据也被推送到数据湖层的原始数据存储中。流处理服务订阅主题,以微批的方式处理流并对一组事件或一个感兴趣的单个事件执行特定操作。处理后的数据然后被提供到两个地方。首先,它进入数据湖的处理后数据存储中。然后,它进入服务层中用于下游消费的组件。

服务层

服务层用于将处理后的数据提供给下游消费者。根据下游消费者的需求和非功能性要求,可以以多种形式和方法提供数据。服务层将在第5章《从数据湖仓库中提取洞见》中更深入地讨论。

总结

本章介绍了数据摄取和处理。我们首先探讨了批量数据摄取的不同模式:ETL和ELT。然后,我们深入研究了ELTL模式的不同组件,该模式用于在数据湖仓库中摄取和处理批量数据。接着,我们讨论了如何将数据推送或拉取到原始数据存储中。最后,我们讨论了原始数据存储层在数据摄取和处理中所起的关键作用。

接下来,我们深入探讨了分布式计算以及如何利用它来处理大规模的批量数据。在讨论完批处理数据摄取和处理后,我们探讨了流数据摄取和处理的模式。然后,我们讨论了如何通过发布到主题并订阅进行流数据摄取。最后,我们了解了如何对流进行微批处理,并对微批处理或特定感兴趣的事件执行操作。

最后,我们将所有讨论的概念汇总,并将它们编织成Lambda架构。在这里,我们讨论了实现批处理层和速度层的方法。

数据摄取和处理在任何现代数据分析平台中都是至关重要的。如果没有高效设计的数据摄取和处理层,整个架构可能无法提供预期的结果。本章提供了可用于构建现代数据分析平台的实用设计模式,使数据摄取和处理具有可伸缩性和适应性。

在下一章中,我们将重点讨论如何将数据存储在数据湖中。

相关推荐
生物小卡拉9 分钟前
R脚本——Deseq2差异表达分析--v1.0
windows·经验分享·笔记·学习·信息可视化·数据分析
jh_cao9 分钟前
(3)SwiftUI 的状态之上:数据流与架构(MVVM in SwiftUI)
ios·架构·swiftui
文火冰糖的硅基工坊29 分钟前
《投资-93》价值投资者的认知升级与交易规则重构 - 衡量公司价值的本质是在公司的整个存续期间能够创造多少自由现金流,而不是当下有多少现金流。
重构·架构·产业链
Hello.Reader35 分钟前
Flink 内置 Watermark 生成器单调递增与有界乱序怎么选?
大数据·flink
工作中的程序员36 分钟前
flink UTDF函数
大数据·flink
工作中的程序员42 分钟前
flink keyby使用与总结 基础片段梳理
大数据·flink
Hy行者勇哥1 小时前
数据中台的数据源与数据处理流程
大数据·前端·人工智能·学习·个人开发
00后程序员张1 小时前
RabbitMQ核心机制
java·大数据·分布式
AutoMQ2 小时前
10.17 上海 Google Meetup:从数据出发,解锁 AI 助力增长的新边界
大数据·人工智能