写点什么

Databricks 开源存储层 Delta Lake,欲取代传统数据湖

  • 2019-05-05
  • 本文字数:3225 字

    阅读完需:约 11 分钟

Databricks开源存储层Delta Lake,欲取代传统数据湖

近日,Databricks 官方博客宣布开源 Delta Lake 项目。Delta Lake 是一个存储层,为Apache Spark和其他大数据引擎提供可伸缩的 ACID 事务,让用户可以基于 HDFS 和云存储构建可靠的数据湖。此外,Delta Lake 还提供了内置的数据版本控制,可以方便地回滚以及重新生成报告。

数据湖面临的挑战

数据湖是现代数据体系结构中的一个常见元素。对于组织试图收集和挖掘的海量数据,它们扮演着摄取中心的角色。虽然在控制数据范围方面已经迈出了良好的一步,但它们还存在以下常见问题:


  1. 对数据湖进行的读写操作不可靠。数据工程师经常遇到数据湖写入不安全的问题,这会导致读取方在写入期间看到垃圾数据。它们必须构建变通方案,确保读取方在写操作期间看到的数据始终一致。

  2. 数据湖的数据质量较差。将非结构化数据转储到数据湖中很容易。但这是以数据质量为代价的。如果没有任何机制验证模式和数据,那么数据湖就会受到数据质量差的影响。因此,试图挖掘这些数据的分析项目也会失败。

  3. 随着数据量的增加,性能变差。随着转储到数据湖中的数据量的增加,文件和目录的数量也会增加。处理数据的大数据作业和查询引擎在处理元数据操作上花费了大量时间。这个问题在流作业的情况下会更加明显。

  4. 更新数据湖中的记录非常困难。工程师需要构建复杂的管道来读取整个分区或表,修改数据并将其写回。这样的管道效率低下,难以维护。


由于这些挑战,许多大数据项目未能实现其愿景,有时甚至完全失败。为了使数据从业者能够在保证数据质量的同时利用他们现有的数据湖,Databricks 构建了这个解决方案。

Delta Lake 特性

Delta Lake 解决了上述问题,简化了数据湖构建。以下是 Delta Lake 提供的主要功能:


  • ACID 事务:Delta Lake 提供多个写操作之间的 ACID 事务。每个写操作都是一个事务,事务日志中记录的写操作有一个串行顺序。事务日志会跟踪文件级的写操作,并使用乐观并发控制,这非常适合数据湖,因为尝试修改相同文件的多个写操作并不经常发生。在存在冲突的场景中,Delta Lake 会抛出一个并发修改异常,以便用户处理它们并重试它们的作业。Delta Lake 还提供了强大的序列化隔离级别,允许工程师不断地对目录或表进行写操作,而用户可以不断地从相同的目录或表中读取数据。读取者将看到读操作开始时存在的最新快照。

  • 模式管理:Delta Lake 会自动验证正在写入的 DataFrame 模式是否与表的模式兼容。表中存在但 DataFrame 中不存在的列会被设置为 null。如果 DataFrame 中有额外的列在表中不存在,那么该操作将抛出异常。Delta Lake 具有可以显式添加新列的 DDL 和自动更新模式的能力。

  • 可伸缩的元数据处理:Delta Lake 将表或目录的元数据信息存储在事务日志中,而不是存储在元存储(metastore)中。这使得 Delta Lake 能够在固定的时间内列出大型目录中的文件,并且在读取数据时非常高效。

  • 数据版本控制和时间旅行:Delta Lake 允许用户读取表或目录先前的快照。当文件在写期间被修改时,Delta Lake 将创建文件的新版本并保存旧版本。当用户希望读取表或目录的旧版本时,他们可以向 Apache Spark 的读操作 API 提供一个时间戳或版本号,Delta Lake 根据事务日志中的信息构建该时间戳或版本的完整快照。这使得用户可以重新进行试验并生成报告,如果需要,还可以将表还原为旧版本。

  • 统一的批处理和流接收(streaming sink):除了批处理写之外,Delta Lake 还可以使用Apache Spark的结构化流作为高效的流接收。再结合 ACID 事务和可伸缩的元数据处理,高效的流接收现在支持许多接近实时的分析用例,而且无需维护复杂的流和批处理管道。

  • 记录更新和删除(即将到来):Delta Lake 将支持合并、更新和删除 DML 命令。这使得工程师可以轻松地维护和删除数据湖中的记录,并简化他们的变更数据捕获和 GDPR 用例。由于 Delta Lake 在文件粒度上跟踪和修改数据,因此,比读取和覆写整个分区或表要高效得多。

  • 数据期望(即将到来):Delta Lake 还将支持一个新的 API,用于设置表或目录的数据期望。工程师将能够通过指定布尔条件及调整严重程度来处理数据期望。当 Apache Spark 作业写入表或目录时,Delta Lake 将自动验证记录,当出现违规时,它将根据所预置的严重程度处理记录。


Delta Lake ACID 保证是建立在存储系统的原子性和持久性基础之上的。具体来说,该存储系统需要提供以下特性:


  • 原子可见性:必须有一种方法使文件完全可见或完全不可见。

  • 互斥:只有一个写入者能够在最终目的地创建(或重命名)文件。

  • 一致性清单:一旦在目录中写入了一个文件,该目录未来的所有清单都必须返回该文件。


Delta Lake 仅在 HDFS 上提供所有这些保证。通过插件的方式加入LogStore API的自定义实现,可以使它与其他存储系统一起工作。


接受ZDNet采访时,Apache Spark 联合创建者兼 Databricks 首席技术官 Matei Zaharia 指出:


Delta Lake 位于你的存储系统之上,它不会取代它们。Delta Lake 是一个事务型存储层,它既可以工作在 HDFS 上,也可以工作在像 S3、Azure Blob 存储这样的云存储之上。用户可以下载开源的 Delta Lake,并将其与 HDFS 一起在本地使用。用户可以从任何支持 Apache Spark 数据源的存储系统读取数据,并向 Delta Lake 写入数据,Delta Lake 以 Parquet 的格式存储数据。


Apache Parquet是 Databricks 的首选格式。它是 Hadoop 生态系统中任何项目都可以使用的一种开源列式存储格式,而且与选择哪种数据处理框架无关。因此,Delta Lake 似乎是其所支持的数据存储格式之上的一层。


谈到可靠性,Ghodsi 表示:


所有这些都有助于增加数据湖的可靠性。数据版本控制和回滚是 Delta Lake 提供的开箱即用的功能。该功能是完全开源的,不需要任何特定的 Databricks 集成。

Delta Lake 希望标准化大数据在本地和云中的存储方式。目标是使数据湖为分析和机器学习做好准备。为了实现这一目标,Delta Lake 提供了一种开放格式和事务性协议。


Delta Lake 项目的最终目标是数据科学和机器学习,Ghodsi 告诉 ZDNet:


我们从一开始就相信创新源于合作而不是隔离。这种信念推动了 Spark 项目和 MLflow 的创建。Delta Lake 将培育一个蓬勃发展的开发者社区,他们将合作提高数据湖的可靠性,并加快机器学习创新。


Viacom、Edmunds、Riot Games、McGraw Hill 等公司都已经在生产中使用了这种技术。Ghodsi 指出,Databricks 希望 Delta Lake 成为存储大数据的标准,并致力于建立一个欣欣向荣的开源社区:


我们一些最大的终端用户已经表现出了很大的兴趣,他们对把这个系统延伸到他们自己的特定场景中的前景感到兴奋,因为它是开源的。我们希望 Delta Lake 成为存储大数据的标准。为此,我们决定开放源代码,让整个社区从中受益。


另外, ZDNet 在报道中指出:


这不是向数据湖添加事务支持的唯一方法:对于基于 HDFS 的存储,Apache Hive是另一种方法。但是,Delta Lake 增加的价值来自事务和统一数据格式的组合。Cloudera 的 Ozone 项目是另一项将云存储和内部存储(包括事务)统一起来的工作,但它还没有准备好用于生产环境。Hive 和 Ozone 的结合可能可以带来类似 Delta Lake 所提供的东西,但现在还没有发展到这一步。


Delta Lake 已经发布到 Maven 中央存储库,可以通过在 POM 文件中添加依赖项来使用它。


<dependency>  <groupId>io.delta</groupId>  <artifactId>delta-core_2.11</artifactId>  <version>0.1.0</version></dependency>
复制代码


Delta Lake 目前需要 Apache Spark 2.4.2。它目前提供的唯一稳定的公共 API 是通过 DataFrameReader/Writer(即 spark.read、df.write、spark.readStream 和 df.writeStream)提供的。这些 API 的选项在 Delta Lake 的主要版本(例如 1.x.x)中将保持稳定。这个库中的所有其他接口都被认为是内部接口,并且可能会在次要版本/补丁版本之间进行更改。


要了解更多信息,请查看Delta Lake文档快速入门指南。你也可以加入 Delta Lake 项目邮件列表或通过Slack频道与社区进行讨论。要在云中试用 Delta Lake,则可以在 Databricks (Azure | AWS)上免费注册试用。


2019-05-05 08:008643
用户头像

发布了 742 篇内容, 共 482.5 次阅读, 收获喜欢 1549 次。

关注

评论

发布
暂无评论
发现更多内容

ByteHouse+Apache Airflow:高效简化数据管理流程

字节跳动数据平台

airflow 数据管理 bytehouse

WMS 库存系统设计

红袖添香

系统设计 供应链物流 WMS系统 库存系统

加速44%!RT-DETR量化无损压缩优秀实战

飞桨PaddlePaddle

人工智能 百度 paddle

精打细算:OptaPlanner如何帮助您找到最佳优惠券组合

PeterOne

算法 运筹优化 6 月 优质更文活动

Seata Saga 模式快速入门和最佳实践

SOFAStack

分布式 云原生 开发 seata Seata框架

前端基于DOM或者Canvas实现页面水印

不叫猫先生

Vue canvas 6 月 优质更文活动

2种GaussDB(DWS)查看作业运行信息方式

华为云开发者联盟

数据库 后端 华为云 华为云开发者联盟 企业号 6 月 PK 榜

智达方通EPM 发布5.0版本,持续赋能企业数智化管理

智达方通

EPM 智达方通 全面预算管理 智达方通EPM 企业绩效管理系统

架构模块2作业

sandywrh

华为手环、耳机等礼品!等你拿~快来参与CodeArtsBuild实践体验!

华为云PaaS服务小智

云计算 华为 华为云

Acrobat Pro DC 2023 for Mac(PDF编辑器) 中文最新

背包客

macos Mac软件 pdf编辑工具 Acrobat DC 2023 Acrobat DC

风口上的AIGC,技术岗动不动年薪百万,甚至重金难求?

引迈信息

人工智能 低代码 AIGC ChatGPT

手势识别技术的挑战和未来发展

来自四九城儿

Spring Security6 全新写法,大变样!

江南一点雨

Java springboot springsecurity

手势识别技术及其应用

来自四九城儿

JS中, Set为什么是带键的集合?

林十二XII

前端

ubuntu服务器安装图形化界面总结

Studying_swz

6 月 优质更文活动

联盟送福利:云上掘金,开启你收入的第二增长曲线

华为云开发者联盟

云计算 华为云 华为云开发者联盟 企业号 6 月 PK 榜

Web 富文本编辑器之 Android 输入兼容

爱吃小舅的鱼

Web 富文本编辑器 Android 输入兼容

当 GraphQL 遇上图数据库,便有了更方便查询数据的方式

NebulaGraph

图数据库 graphql

2023-06-14:我们从二叉树的根节点 root 开始进行深度优先搜索。 在遍历中的每个节点处,我们输出 D 条短划线(其中 D 是该节点的深度) 然后输出该节点的值。(如果节点的深度为 D,则其

福大大架构师每日一题

Go 算法 rust 福大大架构师每日一题

喜报|瑞云科技荣获“年度汽车数字化营销供应商”奖

3DCAT实时渲染

云仿真 汽车三维可视化 汽车虚拟仿真

软件测试|抓包工具Charles--出现unknown怎么解决?

霍格沃兹测试开发学社

建设数字工厂:生产物料齐套检查的实现方法

华为云开发者联盟

华为云 华为云开发者联盟 企业号 6 月 PK 榜

MegEngine 使用小技巧:如何做 MegCC 的模型性能评测

MegEngineBot

深度学习 开源 性能测试 编译器 MegEngine

用Optaplanner实现云资源优化:建模详解

PeterOne

算法 后端 运筹优化 6 月 优质更文活动

为开发者“铸剑”,一图揭秘华为云CodeArts IDE四大特性

华为云PaaS服务小智

云计算 开发者 华为云

GitHub 2800颗星,支持GPT/Transformer,字节跳动这个开源项目是怎么来的?

字节跳动技术范儿

机器学习 nlp

生产环境可用的 Seata-go 1.2.0 来啦!!!

SOFAStack

Java seata 版本发布 Seata框架 Seata-go

海纳 “千川”:得物多场景统一推荐平台

得物技术

Databricks开源存储层Delta Lake,欲取代传统数据湖_大数据_Databricks博客_InfoQ精选文章