Delta Lake:数据湖的解决方案

随着数据行业的迅速发展,企业面临着存储和处理海量数据的挑战。当前,企业能够收集到的数据量前所未有,这些数据中蕴含着对业务和客户的宝贵洞察。数据以多种形式出现,包括视频、音频和文本。数据湖能够以低成本存储这些格式的数据,并且与特定的供应商无关,这与数据仓库不同。然而,数据湖也存在一些限制,比如维护可靠数据的困难、查询结果不准确、数据量增加导致性能下降以及难以正确地保护和治理数据。如果不解决这些限制,73%的公司数据可能会被闲置。Delta Lake 正是解决这些限制的方案。让深入了解Delta Lake究竟是什么。云对象存储可以容纳和处理属于众多客户的艾字节数据。

Delta Lake 简介

Delta Lake 是一个基于文件的开源存储格式和管理层,它使用事务日志,这些日志被压缩成Apache Parquet格式。这使得它能够支持ACID(原子性、一致性、隔离性、持久性),时间旅行和快速的元数据操作。它运行在现有的数据湖之上,并且与Apache Spark等处理引擎兼容。

Delta Lake 的特点

根据Lee, Das, & Jaiswal(2022)的研究,以下是与Delta Lake相关的一些特点:

  • ACID保证 - 所有写入存储的数据变更都具有持久性,并且对读者来说是原子可见的。
  • 可扩展的数据和元数据处理 - Delta Lake建立在数据湖之上,允许使用Spark或其他处理引擎进行读写操作,可扩展至拍字节规模。Delta Lake使用Spark进行元数据处理,有效管理数十亿文件的元数据。
  • 审计历史和时间旅行 - Delta Lake事务日志记录了数据变更的所有细节,提供了完整的变更审计。它还允许开发者访问和回滚到数据的早期版本。
  • 模式强制和模式演化 - Delta Lake不允许插入模式错误的数据;此外,它允许明确的表模式演化,以适应动态数据。
  • 支持删除、更新和合并操作 -Delta Lake支持删除、更新和合并操作,以实现复杂的应用案例。
  • 流处理和批处理统一 -Delta Lake表可以同时在批处理和作为流处理源中工作。

Delta Lake 术语

在深入探讨Delta Lake的架构/工作模式之前,必须讨论一些关键术语。

  • Pipeline - 管道是一系列管道和其他附件(如泵、阀门等),用于将液体或气体从源头输送到目的地。在Delta Lake中,管道高效地查询处理过的数据并从中获取洞察。
  • Parquet - Parquet或Apache Parquet是一个开源的列式数据文件格式。这是在云对象存储中存储关系数据集最常见的方式,每个表都作为一组对象存储。
  • ETL - ETL代表提取、转换、加载。在这里,数据工程师从不同来源提取数据,将它们转换为可用形式,并加载到系统中供最终用户使用。

Delta Lake 的工作机制

以下图像展示了Delta Lake与传统平台相比的优势。

(1) 使用独立存储系统的管道。

(2)Delta Lake

Delta Lake通过其流I/O和性能特性,用Delta表替换了独立的存储系统,运行ETL和BI。低成本的对象存储减少了数据副本,降低了存储成本和维护开销。

使用Delta Lake的步骤

将Delta Lake集成到Apache Spark生态系统中是开始使用Delta Lake的最简单方式。有三种机制:利用本地Spark shell使用Delta Lake,使用Github或Maven,以及利用Databricks社区版。

利用本地Spark shell使用Delta Lake

./bin/pyspark --packages io.delta:delta-core_2.12:1.0 ./bin/spark-shell --packages io.delta:delta-core_2.12:1.0 ./bin/spark-submit --packages io.delta:delta-core_2.12:1.0 ./bin/spark-sql --packages io.delta:delta-core_2.12:1.0

使用Github或Maven

Github是一个在线托管服务,用于开发软件。它为每个项目提供访问控制、错误跟踪、软件功能请求、任务管理和持续集成的好处。Maven是一个构建自动化工具,广泛用于Java项目。使用Maven也可以构建和管理C#、Ruby、Scala等语言的项目。Apache软件基金会是该项目的托管方。

利用Databricks社区版

Databricks是一个基于Web的开放平台,作为一个协作环境,用于执行交互式和计划性数据分析。要创建账户,需要访问https://databricks.com/try并遵循说明免费使用社区版。社区版包括许多教程和示例。可以编写自己的Python、R、Scala或SQL笔记本;也可以导入其他笔记本。

将讨论构建Delta表的基本操作。Delta包括完整的API,用于大数据生态系统中常用的三种语言:Python、Scala和SQL。它可以将数据存储在HDFS和云对象存储中,包括S3和ADLS gen2。它的设计方式是主要由Spark应用程序写入,并且可以被许多开源数据引擎如Spark SQL、Hive、Presto(或Trino)以及许多企业产品如AWS Athena、Azure Synapse和BigQuery读取。在基本操作中,将重点关注使用Python编写和读取Delta表。

data = spark.range(0, 5) data.write.format("delta").save("/delta")

数据分区在处理大量数据时非常重要。以下代码片段正是这样做的:

data.write.partitionBy("date").format("delta").save("/delta")

如果存在现有的Delta表,并且需要向表中追加或覆盖数据,可以使用mode方法,如下所示:

data.write.format("delta").mode("append").save("/delta") data.write.format("delta").mode("overwrite").save("/delta")

读取Delta表

spark.read.format("delta").load("/delta").show() data.write.format("delta").saveAsTable("myTable")
沪ICP备2024098111号-1
上海秋旦网络科技中心:上海市奉贤区金大公路8218号1幢 联系电话:17898875485