1、什么是数据湖?
数据湖是一种技术系统,可以大批量并且廉价的分析结构化和非结构化数据资产。
其实很简单,数据湖的最大魅力在于可以分析一切类型的数据。
自 2010 年首次提出“数据湖”一词以来,采用数据湖架构的组织数量呈指数级增长。它们支持多种分析功能,从数据的基本 SQL 查询到实时分析,再到机器学习。
主要组成:
数据湖由四个主要组件组成:存储层、格式化层、计算层和元数据层。
2、为什么要使用数据湖?
数据湖架构将数据资产整合到一个集中的存储库中。该存储库将用作对以前孤立的数据进行跨功能分析的根基。此外,来自数据湖的架构有助于数字化驱动的实现。
任何拥有来自物联网传感器或移动应用点击流等来源的大规模非结构化数据都可以采用数据湖架构,这也是未来大数据的发展方向之一。
数据湖与数据仓库
数据湖和数据仓库的相似之处在于它们都支持分析大型数据集。然而,他们实现这一目标的方法在几个关键方面有所不同。
模块化:数据仓库通常是专有的、单一的应用程序,比如使用HADOOP,HIVE等构建数据仓库。而数据湖的特点是其组件的模块化,主要由开源技术和开放格式组成。
架构:数据仓库要求数据在写入或摄取时立即符合 DDL 定义的架构。相比之下,数据湖允许数据自由存储,数据的结构验证在读取时进行。
成本与性能:数据仓库通常以更高的价格提供高性能。用户在将数据插入表之前通常会面临历史记录的聚合,以避免过高的成本。
数据湖将数据存储保持在极具成本效益的存储服务中,因此不会产生过高存储费用。计算资源可弹性伸缩,以最佳方式满足工作负载的需求,无需额外成本。
结构化与非结构化数据:数据仓库专为结构化表格数据集而设计。而数据湖也可用于分析非结构化或半结构化格式的数据。
事实上,数据湖与数据仓库是可以并行的,要结合实际业务情况进行。
3、如何构建数据湖?
高度可用的存储服务是数据湖的第一步。
在将数据转换为更适合分析的格式之前,应以原始格式存储数据。
接下来,连接诸如 Spark 或 Presto 之类的计算引擎以对数据运行计算。
总共分四部:
- 原始数据进入对象存储
- 优化原始数据文件以按大小和格式进行分析
- 添加元数据工具来定义模式并启用版本控制 发现
- 将下游消费者集成到优化的数据资产中
4、数据湖技术路线
在数据湖的每一层架构中,都有许多技术可以组合起来创建数据湖。
存储: 主要云提供商 AWS S3的存储服务最常用于数据湖的存储层。还有许多其他托管和开源存储提供商也完全能够支持数据湖,包括:MinIO、HDFS、IBM 云存储、阿里巴巴对象存储、Wasabi、Ceph、Oracle 云存储、SwiftStack ,和Spaces Object Storage。
数据格式:最简单的格式示例是 CSV 和 JSON,基本都是支持的。还存在专为数据湖用例设计的更专业的格式,如 Parquet、Delta、Iceberg、Avro 和 Hudi。这些格式提高了湖操作的效率,并使事务原子性和时间回溯等功能成为可能。
媒体图像、视频和音频文件相关的非结构化数据格式也常见于数据湖中。
计算:大型的计算引擎必须是分布式的。示例包括 MapReduce 和 Hadoop 等技术、以及 Spark 、Presto、Flink 等等。
元数据:非常的重要,特别是影响到以后的数据治理。
客户端和库:通过 JDBC/ODBC 和其他数据传输接口,可以访问湖中数据。S3 API,BI 工具和 SQL 客户端。
5、应用
数据湖适用于一切分析的场景。
- 本地数据分析:一旦将数据放入湖中,就无需将其移至其他地方以进行基于 SQL 的分析。让分析师对数据湖数据运行查询,以识别趋势并计算有关业务的指标。
- 机器学习模型训练:机器学习模型通常需要大量数据来训练以优化其参数,并实现高水平的准确性。数据湖使数据科学家可以重复创建训练和测试集以优化模型。
- 存档和历史数据存储:除了数据湖提供的直接业务价值外,还可以将它们用作存档历史数据的存储。
6、数据湖的挑战
数据湖周围的生态系统相对较新,在某些情况下使用的技术仍在成熟中。因此,数据湖容易面临一些常见问题。
小文件:一个这样的问题是“小文件问题”,当大量文件(每个文件包含少量数据)出现在数据湖中时就会发生。小文件的问题是它们运行计算和保持最新的元数据统计数据效率低下。
小文件问题的解决方案是运行定期维护作业,将数据压缩到理想大小以进行有效分析。
分区 和查询效率:类似于在仓库表上添加索引的概念,数据湖资产可以通过使用分区来优化聚合或过滤某些字段。分区是指按 Blob 存储上的特定字段或字段集对数据进行物理组织。
在没有意识到这一点的情况下,用户可能会因运行不太适合表分区结构的查询而招致大量成本和等待时间。
共享驱动器:如果没有适当的工作流程和治理,数据湖很容易类似于共享文件夹,多人在其中放置文件,而无需考虑其他用户的预期要求。适当的工作流程是必要的,以避免湖成为数据沼泽。
7、如何避免数据沼泽
数据沼泽是数据湖的退化状态。湖中的表要么返回不准确的数据,要么文件损坏并且查询完全停止运行。
必须保持对插入生产数据集的任何数据的质量和属性有充分的认识。
更多数据湖相关技术与方案分享,欢迎关注 大数据流动