暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【详谈 Delta Lake】系列专题 之 基础和性能 - 01 Delta Lake基础:为什么可靠性和性能很重要?

译者

韩宗泽(棕泽),阿里云计算平台事业部技术专家,负责开源大数据生态企业团队的研发工作


前言

本文翻译自大数据技术公司 Databricks 针对数据湖 Delta Lake 系列技术文章。众所周知,Databricks 主导着开源大数据社区 Apache Spark、Delta Lake 以及 ML Flow 等众多热门技术,而 Delta Lake 作为数据湖核心存储引擎方案给企业带来诸多的优势。

此外,阿里云和 Apache Spark 及 Delta Lake 的原厂 Databricks 引擎团队合作,推出了基于阿里云的企业版全托管 Spark 产品——Databricks 数据洞察,该产品原生集成企业版 Delta Engine 引擎,无需额外配置,提供高性能计算能力。有兴趣的同学可以搜索` Databricks 数据洞察`或`阿里云 Databricks`进入官网,或者直接访问以下链接进行了解:

https://www.aliyun.com/product/bigdata/spark 


本系列还包括其他内容,欢迎持续关注:

  • 第一章:基础和性能

    01、(本文)Delta Lake基础:为什么可靠性和性能很重要?

    02、深入理解事务日志 / 如何使用Schema约束和演变

    03、Delta Lake DML语法 / 在Delta Lake中使用Data Skipping和Z-Ordering来快速处理PB级数据

  • 第二章:特性

  • 第三章:Lakehouse

  • 第四章:Streaming

  • 第五章:客户用例




Delta Lake技术系列 - 基础和性能

(Fundamentals and Performance)

——使用 Delta Lake 为机器学习和商业智能提供可靠的数据保障





本文介绍内容

Delta Lake 系列电子书由 Databricks 出版,阿里云计算平台事业部大数据生态企业团队翻译,旨在帮助领导者和实践者了解 Delta Lake 的全部功能以及它所处的场景。在本文中,Delta Lake 系列-基础和性能(Fundamentals and performance),重点介绍 Delta Lake 的基础及性能。


后续

读完第一章后,您不仅可以了解 Delta Lake 提供了什么特性,还可以理解这些的特性是如何带来实质性的性能改进的。


什么是 Delta Lake?

Delta Lake 是一个统一的数据管理系统,为云上数据湖带来数据可靠性和快速分析。Delta Lake 运行在现有数据湖之上,并且与 Apache Spark 的 API 完全兼容。


在 Databricks,我们看到了 Delta Lake 如何为数据湖带来可靠性、性能和生命周期管理。我们的客户已经证明,Delta Lake 解决了以下难题:从复杂的数据格式中提取数据的挑战、删除数据以实现法规遵从性的困难、以及为数据捕获进行修改数据所带来的问题。


使用 Delta Lake,您可以加快高质量数据导入数据湖的速度,团队也可以在云服务上快速使用这些数据,安全且可扩展。



Chapter-01 Delta Lake 基础:为什么可靠性和性能很重要?

提到数据可靠性,性能(程序运行的速度)是其中最重要的指标。由于 Delta Lake 提供的 ACID 事务性保护,您可以获得所需的可靠性和性能。


使用 Delta Lake,您可以同时进行流式和批处理作业(我们称为批流一体)、执行 CRUD(对数据的增删改查)操作,从而节省您的资金——因为您现在使用的 vm 相比之前更少了。通过使用批流一体架构,使得维护您数据工程的 data pilelines 会变得非常轻松。


Delta Lake 是一个存储层,它通过在写操作间进行乐观锁控制和快照隔离技术,来提供 ACID 事务性,从而为基于 HDFS 和云对象存储(如阿里云 OSS、AWS S3)的数据湖带来可靠性,进而在写操作期间可以实现一致性的数据读取。Delta Lake 还提供了内置的数据版本控制,以方便回滚和复现。


在本章中,我们将分享数据湖的一些常见挑战,以及 Delta Lake 是如何解决这些挑战的。


数据湖的挑战

数据湖是现代数据体系结构中的一个常见元素。它们通常充当大量数据的存储中心和接收点,以使公司对数据进行收集并挖掘数据的价值。虽然随着数据湖的演进在领域内有所发展,但数据湖通常会有以下几点问题:

  • 数据湖中数据的读写是不可靠的(Reading and writing into data lakes is not reliable)。数据工程师经常遇到这样的问题:不安全地写入数据湖,这会导致如果读取数据过程中同时又有数据写入,那么将会产生垃圾数据。那边必须构建其他额外的方法,来保证数据同时读写情况的数据一致性。

  • 数据湖中的数据质量较低(The data quality in data lakes is low)。将非结构化数据转储到数据湖通常都很容易,但这是以牺牲数据质量为代价的。由于没有任何机制来验证Schema和数据,数据湖中的数据质量通常都会很差。那么这会导致那些试图挖掘这些数据的分析项目也随之失败了(由于数据质量低)。


  • 持续增长的数据规模导致性能很差(Poor performance with increasing amounts of data)。随着存储到数据湖中的数据持续增加,文件和目录的数量也会随之增加。大数据作业和查询引擎将会花费大量时间来处理元数据——这个问题在流作业或处理许多并发批处理作业的情况下更为明显。


  • 在数据湖中修改、更新或者删除记录非常困难(Modifying, updating or deleting records in data lakes is hard )。工程师需要构建复杂的Pipeline来读取整个分区或表,修改数据并将其写回。这种Pipeline效率很低,而且难以维护。


由于数据湖的上述这些挑战,许多大数据项目未能实现其愿景,甚至有时项目会完全失败。我们需要一个解决方案,使得数据从业者能够利用好他们现有的数据湖,同时可以确保数据的质量。



Delta Lake的核心能力

Delta Lake 简化了构建数据湖的方式,并解决了上述问题。Delta Lake提供以下关键功能:



  • ACID 事务性:Delta Lake 在多个写操作之间提供 ACID 事务性。每一次写操作都是一个事务操作,事务日志(Transaction Log)中记录的写操作都有一个顺序序列。事务日志(Transaction Log)跟踪了文件级别的写操作,并使用了乐观锁进行并发控制,这非常适用于数据湖,因为尝试修改相同文件的多次写操作的情况并不经常发生。当发生冲突时,Delta Lake 会抛出一个并发修改异常,抛给供用户处理并重试其作业。Delta Lake 还提供了最高级别的隔离(可序列化隔离),允许工程师不断地向目录或表写入数据,而使用者不断地从同一目录或表读取数据,读取数据时会看到数据的最新快照。


  • Schema 管理(Schema management):Delta Lake 会自动验证正在写入的 DataFrame 的 Schema 是否与表的 Schema 兼容。若表中存在但 DataFrame 中不存在的列则会被设置为 null。如果 DataFrame 中有额外的列不在表中,那么该操作将会抛出异常。Delta Lake 具有 DDL(数据定义语言)显式添加新列的功能,并且能够自动更新 Schema。


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


  • 数据版本控制和时间旅行(Time Travel):Delta Lake 允许用户读取表或目录的历史版本快照。当文件在写入过程中被修改时,Delta Lake 会创建文件的新的版本并保留旧版本。当用户想要读取表或目录的较旧版本时,他们可以向 Apach Spark 的 read API 提供时间戳或版本号,Delta Lake 根据事务日志(Transaction Log)中的信息来构建该时间戳或版本的完整快照。这非常方便用户来复现实验和报告,如果需要,还可以将表还原为旧版本。


  • 统一批流一体:除了批处理写入之外,Delta Lake 还可以作为 Apache Spark 的结构化流的高效流接收器(Streaming Sink)。与 ACID 事务和可伸缩元数据处理相结合,高效的流接收器(Streaming Sink)支持大量近实时的分析用例,而无需维护复杂的流和批处理管道。


  • 记录更新和删除Delta Lake 将支持合并、更新和删除的DML(数据管理语言)命令。这使得工程师可以轻松地在数据湖中插入和删除记录,并简化他们的变更数据捕获和 GDPR(一般数据保护条例)用例。由于 Delta Lake 在文件级粒度上进行跟踪和修改数据,因此它比读取和覆盖整个分区或表要高效得多。


  • 数据期望(Data expectations,即将推出):Delta Lake 还将支持一个新的 API 来设置表或目录的数据期望。工程师将能够指定一个布尔条件并调整参数以处理数据的期望。当 Apache Spark 作业写入表或目录时,Delta Lake 将自动验证记录,当发生冲突时,它将根据提供的严重性处理记录。



后续

本系列还包括其他内容,欢迎持续关注:

  • 第一章:基础和性能

    01、(本文)Delta Lake基础:为什么可靠性和性能很重要?

    02、深入理解事务日志 / 如何使用Schema约束和演变

    03、Delta Lake DML语法 / 在Delta Lake中使用Data Skipping和Z-Ordering来快速处理PB级数据

  • 第二章:特性

  • 第三章:Lakehouse

  • 第四章:Streaming

  • 第五章:客户用例





获取更详细的 Databricks 数据洞察 相关信息,可至产品详情页查看:

https://www.aliyun.com/product/bigdata/spark


阿里巴巴开源大数据技术团队成立 Apache Spark 中国技术社区,定期推送精彩案例,技术专家直播,只为营造纯粹的 Spark 氛围,欢迎关注公众号!


扫描下方二维码入 Databricks 数据洞察产品交流钉钉群一起参与交流讨论!



文章转载自Apache Spark技术交流社区,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论