深入剖析 Delta Lake:详解事务日志

本文深入剖析 Delta Lake 的事务日志,解释其作为单一信息源,保证 Delta Lake 的原子性,以及如何通过乐观锁处理并发读写。事务日志记录所有操作,支持时间回溯和数据血缘,确保 ACID 特性的实现。
摘要由CSDN通过智能技术生成

编译:辰山,阿里巴巴计算平台事业部 EMR 高级开发工程师,目前从事大数据存储方面的开发和优化工作


事务日志(Transaction log)是理解 Delta Lake 的一个关键点,很多 Delta Lake 的重要特性都是基于事务日志实现的,包括 ACID 事务性、可扩展元数据处理、时间回溯等等。本文将探讨什么是事务日志,如何在文件层面实现,以及怎样优雅地解决并发读写的问题。

什么是事务日志?

Delta Lake 的事务日志(简称 DeltaLog)是一种有序记录集,按序记录了 Delta Lake 表从生成伊始的所有事务操作。

事务日志有何作用?

单一信息源

Delta Lake 基于 Apache Spark 构建,用来支持多用户同时读写同一数据表。事务日志作为单一信息源——跟踪记录了用户所有的表操作,从而为用户提供了在任意时刻准确的数据视图。


当用户首次访问 Delta Lake 的表,或者对一张已打开的表提交新的查询但表中的数据在上一次访问之后已发生变化时,Spark 将会检查事务日志来确定该表经历了哪些事务操作,并将更新结果反馈给用户。这样的流程保证了用户所看到的数据版本永远保持与主分支一致,不会对同一个表产生有冲突的修改。

Delta Lake 原子性实现

原子性,作为 ACID 四个特性之一,保证了对数据湖的操作(例如 INSERT 或者 UPDATE)或者全部完成,或者全部不完成。如果没有原子性保证,那么很容易因为硬件或软件的错误导致表中的数据被部分修改,从而导致数据错乱。


事务日志提供了一种机制来保证 Delta Lake 的原子性。任何操作只要没有记录在事务日志中,都会被认为没有发生过。事务操作只有在完全执行成功后才会被记录到事务日志中,并且将事务日志作为单一信息源,这两者保证了数据的可靠性,保证用户可以安心处理 PB 级的数据。

事务日志如何工作?

将事务分解为原子提交

每当用户提交一个修改表的操作时(例如 INSERT, UPDATE 或 DELETE),Delta Lake 将该操作分解为包括如下所示的一系列离散的步骤:

  • 添加文件:添加一个数据文件。

  • 删除文件:删除一个数据文件。

  • 更新元数据:更新表的元数据(例如修改表的名称、schema 或分区)。

  • 设置事务:记录 Spark structured streaming 任务提交的 micro batch 的 ID。

  • 更改协议:将事务日志

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值