本文翻译自 Databricks 官方博客
我们很高兴地宣布将 Delta Lake 项目开源。 Delta Lake 是一个存储层,通过在写入和快照隔离之间提供乐观并发控制实现 ACID 事务,保证了在写入期间读取的一致性,从而为构建在 HDFS 和云存储上的数据湖泊带来可靠性保障。 Delta Lake 还提供内置数据版本控制,以便轻松回滚和复制报告。该项目可在 delta.io 下载。该项目使用 Apache License 2.0 协议。

数据湖泊面临的挑战
数据湖泊是现代数据架构中的常见元素。企业在不断进行收集和挖掘海量数据时,数据湖泊可以作为中央存储。然而,虽然目前的数据湖泊在数据治理方面迈出了一大步,但它们遇到了以下常见问题:
- 读取和写入数据湖泊是不可靠的。数据工程师经常遇到不安全写入数据湖并导致读者在写入期间看到垃圾数据的问题。他们必须构建变通方法以确保读者在写入期间始终看到一致的数据。
- 数据湖泊中的数据质量很低。将非结构化数据转储到数据湖泊中很容易,但这是以数据质量为代价的。没有任何验证 Schema 和数据的机制的话,数据湖泊的数据质量将会变得很差,以至于努力挖掘这些数据的分析项目也会失败。
- 随着数据量的增加,性能越来越差。随着转储到数据湖泊中的数据量的增加,文件和目录的数量也会增加。处理数据的大数据作业和查询引擎在处理元数据操作上就会花费大量时间;在执行流式作业时,这个问题会更加明显。
-
更新数据湖泊中的记录很难。工程师需要构建复杂的处理作业来读取整个分区或表,修改数据并将其写回,这种作业效率低且难以维护。
由于存在这些挑战,许多大数据项目无法实现其愿景,有时甚至会完全失败。我们需要一种解决方案,使数据从业者在能够利用他们现有的数据湖泊的同时确保数据质量。
Delta Lake 开源项目介绍
Delta Lake 解决了上述问题,能简化您构建数据湖泊的方式。它提供以下主要功能:
- ACID 事务:Delta Lake 提供多次写入之间的 ACID 事务。每次写入都是一个事务,并且在事务日志中顺序记录了写入的序列。事务日志跟踪文件级别的写入并使用乐观并发控制,这非常适合数据湖泊,因为不会经常发生多个写入尝试修改相同的文件的情况。在存在冲突的情况下,Delta Lake 会抛出并发修改异常以遍用户处理并重试其作业。 Delta Lake 还提供强大的可序列化隔离级别,允许工程师持续写入一个目录或表,并允许消费者持续从同一目录或表中进行读取。读取者将会看到开始读取时存在的最新快照。
- Schema 管理:Delta Lake 自动验证正在写入的 DataFrame 的 Schema 是否与表的 Schema 兼容。表中存在但不在 DataFrame 中的列设置为 null。如果 DataFrame 中有 Schema 中没有定义的列,则此操作会引发异常。 Delta Lake 具有显式添加新列的 DDL 以及自动更新 Schema 的能力。
- 可扩展的元数据处理:Delta Lake 将表或目录的元数据信息存储在事务日志中,而不是 Metastore 中,这允许Delta Lake在恒定时间内列出大型目录中的文件,并在读取数据时更高效。
- 数据版本控制和时间旅行:Delta Lake 允许用户读取表或目录的历史快照。在写入或者修改文件时,Delta Lake会创建较新版本的文件并保留旧版本。当用户想要读取旧版本的表或目录时,他们可以为 Apache Spark 的读取 API 提供时间戳或版本号,Delta Lake 根据事务日志中的信息构建该时间戳或版本的完整快照。这允许用户重现实验和报告,并在需要时将表还原为旧版本。
- 统一批处理和流式处理:除了批量写入,Delta Lake 还可以用作 Apache Spark Structured Streaming 的高效流式接收器。结合 ACID 事务和可扩展的元数据处理,高效的流式传输接收器现在可以实现大量近实时分析用例,而无需维护复杂的流式传输和批处理管道。
- 记录更新和删除(即将发布):Delta Lake 提供合并、更新和删除这些 DML 命令。这允许工程师很方便的对数据进行修改和删除,简化数据变更捕获以及 GDPR。因为 Delta Lake 按文件粒度跟踪数据变更,所以比一次处理所有分区或表要高效的多。
- 数据期望(即将推出):Delta Lake 还将支持新的 API 来设置表或目录的数据期望。工程师将能够指定布尔条件并调整严重程度以处理数据期望。当 Apache Spark 作业写入表或目录时,Delta Lake 将自动验证记录,当存在违规时,它将根据提供的严重程度配置对记录进行处理。
结论
Apache Spark 在大数据处理领域进行了变革,并允许工程师构建高效的数据管道。但是,我们发现工程师在如何管理存储层(内部部署和云端)方面存在重大差距。他们不得不通过变通方法构建复杂的数据管道来向消费者提供数据。随着 Delta Lake 的出现,我们看到 Databricks 的客户可以毫不费力地建立可靠的数据湖泊。现在我们正在为更广泛的社区开放 Delta Lake 项目,以便让社区获益。
网友评论