Data Lake—数据处理的演变

https://www.smartcat.io/blog/2018/data-lake-the-evolution-of-data-processing/

近年来,技术的快速发展导致信息流量急剧增加。我们的移动网络提高了覆盖范围和数据吞吐量 固定电话正逐步从铜缆升级为光纤。

由于这一点,越来越多的人通过使用许多不同服务的各种设备不断在线。许多便宜的信息传感物联网设备越来越多地收集数据集 - 航空信息,图像,声音,RFID信息,天气数据等。
所有这些进展导致更多数据在线共享。数据集的数量和复杂性都在迅速增加,传统的数据处理应用程序开始不足以应对。

大量数据在数据捕获,存储,分析,搜索,共享,传输,可视化,查询,更新和信息隐私方面引入了新的挑战。
不可避免地,这些挑战需要全新的架构设计和新技术,这有助于我们存储,分析并从这些大型复杂数据集中获取洞察力。

在这里,我将介绍Data Lake架构,它介绍了存储和处理数据的有趣转折。Data Lake不是大数据世界的革命,是一种通用的解决方案,而是数据处理中的一个简单的演化步骤,这自然而然地成为了现实。

概念

“(Data Lake是)来自多个来源的原始,未建模和未转换数据的集中,整合,持久存储,没有明确的预定义模式,没有外部定义的元数据,并且不保证质量,来源和安全性数据。”

该定义显示了Data Lake的一个关键概念 - 它存储原始未更改的数据。传统上,我们会尝试在数据进入数据仓库之前对其进行过滤和构造。

由此产生两件事 - 构造和转换摄取数据会导致性能损失和潜在的数据丢失。如果我们尝试对大量传入数据进行复杂计算,我们很可能会遇到严重的性能问题。如果我们尝试构建摄取数据,我们稍后可能会意识到我们需要在结构化过程中丢弃数据。

问题是,对于庞大而复杂的数据,我们很可能不知道您可以从中提取哪些见解。我们不知道收集的数据会给我们的业务带来什么价值(如果有的话)。如果我们试图猜测,那么猜测错误的可能性很大。

那我们做什么?我们存储原始数据。现在,我们不想把它扔进那里,因为这将导致数据沼泽 - 一个陈旧的数据池,没有任何关于它代表什么的信息。应该使用元数据来丰富数据,描述其来源,摄取时间等。我们还可以在摄取时对数据进行分区,这使得后续处理更加高效。如果我们在第一次尝试时没有得到正确的分区,我们仍然会拥有所有这些,并且可以重新分区而不会丢失任何数据。

以这种方式摄取数据导致根本没有质量保证,并且没有访问控制。如果我们真的不知道那里有什么,我们就无法围绕它建立有效的安全性。所有这些都将在以后处理数据时出现。有权访问Data Lake的每个人都可能无限制地访问原始数据。

我们可以通过启用对数据分区的选择性访问来引入一个简单的安全系统方案。这是一个相当粗糙的安全性,它可能会或可能不会带来任何价值。

建筑

之前的定义侧重于强调Data Lake系统的核心概念。让我们稍微扩展一下:

“Data Lake支持敏捷数据采集,复杂多结构数据的自然存储模型,支持高效的非关系计算,并提供经济高效的大型和嘈杂数据集存储。”

这个对我们的第一个定义的补充使我们更清楚地了解Data Lake应该是什么。

我们应该能够使用不同的协议从不同的来源收集数据,以存储关系数据和非关系数据,并提供用于分析和处理的API。所有这些都应该足够灵活,以便可以向上和向下扩展。

通常,Data Lake分为三层:摄取,缓存和处理。

这些层中的任何一层都可以包含多种技术,每种技术都提供不同的API和功能。每个层中的每个应用程序/技术都应该能够从水平和垂直缩放中受益,并且在某种程度上具有容错能力。应使用资源管理器协调这些系统中的每一个,以提供成本,容量和容错性的弹性。

摄取层的目的是充当传入Data Lake系统的原始数据的存储层。此层不得强制用户将模式应用于传入数据,但可以将其作为选项提供。我们可能希望使用元数据来丰富数据,因此我们可能希望稍微构建它。

传入数据通常包括时间序列,消息或事件。这些数据通常来自Iot设备,气象站,工业系统,医疗设备,仓库,社交网络,媒体,用户门户等的传感器。

强烈建议支持数据分区,尽管不是强制性的,因为我们可能会对摄取数据进行分区,以便在处理数据时尝试提高性能。

缓存层的目的是临时或永久地存储已处理(或预处理)的数据,关系数据或非关系数据。此处存储的数据可以为外部系统的可视化/消耗做好准备,或者为进一步处理做好准备。

驻留在处理层中的应用程序将从摄取层获取数据,处理它,以某种方式构造它,并将其存储在此处,可选地以某种方式对其进行分区。
通常有一个数据集,由下游系统使用,分散在缓存层(关系,NoSQL,索引引擎等)内的不同存储系统周围。

处理层的目的是提供一个或多个平台,用于分布式处理和分析大型数据集。它可以访问存储在摄取和缓存层中的数据。

通常,此处的技术是使用主工作者体系结构实现的 - 主节点分析在提交给它的应用程序中编码的数据处理算法,创建执行策略,然后在多个工作器实例上分配工作负载,以便它们可以并行执行。利用这种类型的架构,可以轻松扩展处理层,以满足特定用例所需的计算能力需求。

技术标准

回顾之前声明的Data Lake属性,让我们定义用于实现它的技术堆栈需要满足的标准。

  • 可扩展性。技术需要能够以高效的方式接受大量且不断增加的数据。
  • 耐久性。需要安全地保留数据,并且需要支持防止数据丢失(通过使用复制,备份或其他一些机制)
  • 支持摄取非结构化(无架构)数据。
  • 支持有效处理类似流的数据(时间序列,事件/消息)。
  • 由于隐私/法律问题,支持数据擦除,能够删除不需要的数据或不允许存在的数据。
  • 支持数据更新。
  • 支持不同的访问模式 - 随机访问,搜索/查询语言,批量读取。根据用例的不同,不同的下游系统在访问数据时可能有不同的要求。

结论

在这一部分中,我们探讨了Data Lake背后的核心思想,它的架构以及它需要满足的功能需求。

在本系列的下一部分中,我们将研究可以使用哪些技术来实现功能齐全的Data Lake系统。

参考

知乎:数据湖(Data Lake) 总结
https://zhuanlan.zhihu.com/p/91165577
博文:这可能是学习Spark Delta Lake最全的资料
https://www.iteblog.com/archives/2596.html
语雀:大数据的下一站:数据湖
https://www.yuque.com/swteam/cloudsecurity/vkww7l
http://www.ciozj.com