深度解析数据湖存储方案Lakehouse架构

简介:从数据仓库、数据湖的优劣势,湖仓一体架构的应用和优势等多方面深度解析Lakehouse架构。

作者:张泊

Databricks 软件工程师

Lakehouse由lake和house两个词组合而成,其中lake代表Delta Lake(数据湖),house代表data warehouse(数据仓库)。因此,Lakehouse架构就是数据湖和数据仓库的结合。数据仓库和数据湖各自都存在着很多不足,而Lakehouse的出现综合了两者的优势,弥补了它们的不足。

数据仓库从上世纪 80 年代开始发展和兴起,它的初衷是为了支持BI系统和报表系统,而它的优势也就在于此。结构化的数据可以通过ETL来导入数据仓库,用户可以方便地接入报表系统以及BI系统。同时,它的数据管控能力也比较强。

数据仓库对于数据 schema 的要求非常严格,很多数据仓库甚至也实现了 acid 事务等能力。但是数据仓库对于半结构化数据比如时序数据和日志,以及非结构化数据比如图片、文档等的支持是非常有限的,因此它不适用于类似于机器学习的应用场景。而且一般情况下,数据仓库都是专有系统,使用成本比较高,数据迁移和同步的灵活性比较低。

因此,为了解决上述问题,数据湖的架构应运而生。

数据湖架构的基础是将原始数据以文件的形式存储在像阿里云OSS、AWS S3 和 Azure blob storage 等对象存储系统上。相比于数据仓库使用的专有系统,使用这些对象存储的成本比较低。数据湖的另一个优势是能够对半结构化和非结构化的数据提供非常好的支持。因为数据可以以文件的形式直接存储在数据湖之中,所以数据湖在机器学习等场景中的应用就比较广泛。但是它对于 BI 和报表系统的支持比较差,通常情况下需要通过ETL将数据转存到实时数据库或数据仓库中,才能支持 BI 和报表系统,而这对于数据的实时性和可靠性都会产生负面的影响。

综上,不论是数据仓库还是数据湖,都无法完全满足用户的需求。

因此,在很多实际使用场景中,用户会将两者组合起来使用,但是这导致需要构建很多不同的技术栈来支持所有场景。

比如对于数据分析,需要将结构化的数据输入到数据仓库,然后建立数据市场,对数据分析和 BI 提供支持;对于数据科学和机器学习的场景,需要把不同的数据比如结构化、半结构化以及非结构化的数据存储到数据湖中,经过数据清理,用来支持机器学习和数据科学等场景;而对于流式数据源,需要通过流式数据引擎存储到实时数据库中,同时还需要对数据湖里的数据进行 ETL 提取、转换和加载,来保证数据的质量。

这导致需要很多不同的系统、不同的工具来支持各种架构,同时为了数据的互通(上图红线),还需要处理不同的专有数据格式之间的差异,以上流程都会大大影响整个系统的效率。

而且,由于所有技术栈都是互相独立的,导致了维护和使用这些系统的团队也是分散的。比如,数据分析师主要使用数据仓库系统,而数据科学家主要使用数据湖系统,同时数据工程师也需要维护整个系统的不同团队,沟通成本比较高。此外,系统中维护了很多不同格式的数据副本,没有统一的管理数据模型,不同团队的数据很有可能会产生差异。

因此,这种复杂的组合型数据系统不是一个好的解决方案。基于此,databricks提出了Lakehouse。Lakehouse的设计基于一个原则:实现一个适用于所有场景的统一平台。

解决的办法是综合数据湖与数据仓库的能力——基于数据湖使用的对象存储,构建数据仓库拥有的数据管控能力。而这一切的关键就是其中的结构化事务层。

此前,数据湖主要存在以下几个痛点:

  1. 读写并行,就算是追加写的模式也会产生很多问题。用户的期望是所有写操作能够事务性地被同时读到或者同时没有读到,而这是难以实现的,因为在分布式的对象存储上写多个文件,设置一个文件,数据的一致性都是不能完全被保证的。
  2. 数据的修改。由于安全合规等原因,用户会有强制性地修改已有数据的需求,特别是有时候需要根据过滤结果细粒度地修改某些数据。由于数据湖在数据管控能力上的不足,在数据湖上实现此需求往往需要使用全部扫描再重写的方式,成本比较高,速度也比较慢。
  3. 如果一个作业中途失败,而它产生的部分数据已经存入到数据库中,这也会导致数据的损坏。
  4. 批流混合输入。由于数据在批和流系统中都存在,可能会造成数据在两套系统中不一致,导致读取结果不一致。
  5. 存数据历史。有些用户需要保证数据查询的可重复性,方案之一是为了这个需求做很多重复的数据快照,但这会导致数据的存储和计算成本都大幅上升。
  6. 处理海量的元数据。大型数据湖元数据的数据量非常大,经常能够达到大数据的级别。很多数据湖采用的数据目录系统无法支持如此大量的元数据,这也限制了数据湖的扩展性。
  7. 大量小文件的问题。在数据不断输入的过程中,数据湖内会产生大量小文件,随着时间的推移,小文件的数量可能会越来越多,这会严重影响数据湖的读取性能。
  8. 性能问题。在数据湖上达到高性能不是一件容易的事。有的时候为了达到一定的性能要求,用户需要手动做一些性能的优化,比如数据分区等,而这些手动的操作又比较容易出错。
  9. 数据的查询管控。由于数据湖的开放性,确保查询权限合规也是需要解决的问题。
  10. 质量问题。前面很多点都会导致数据质量的问题。在大数据场景下,如何确保数据的正确性也是一个普遍的问题。

而Delta Lake能够为Lakehouse带来数据质量、可靠性以及查询性能的提升。

上述前五个问题都是关于数据可靠性,它们都可以通过Delta Lake的 acid 事务能力来解决。在Delta Lake上,每一个操作都是事务的,即每一个操作都是一个整体,要么整体成功,要么整体失败。如果 一个操作在中途失败,Delta Lake会负责将其写入的不完整数据清理干净。具体的实现方式是Delta Lake维护了包含所有操作的一个事务日志,能够保证数据与事务日志的一致性。

如上图,某次写操作在某个表中添加了很多数据,这些数据被转换成了parquet格式的两个文件file1和file2。有了事务日志,读操作的时候就能够保证要么读不到这条日志,要么同时读到这两条记录,这样就保证了读取的一致性,解决了读写并行的问题。

此外,有了事务日志后也可以对已有数据做细粒度的修改。比如下一次写操作对表中的某些数据进行修改,在事务日志中就会出现删除原有文件file1和添加修改后文件file3这样两条记录。同样,在读取的时候,这两条记录也会被同时读到或者忽略,使读取的一致性得到保证。

针对第三点中途失败的作业,Delta Lake写入的事务性能够保证不完整的数据不会被成功写入。

对于批流混合的输入数据,由于Spark天然支持批流一体,在写入时可以将批和流的数据写入到同一张表,避免了数据冗余及不一致性。

由于事务日志保存了所有操作的历史记录,我们可以对之前某个时间点的历史数据进行查询。具体实现方法是:Delta Lake可以查到历史某个时间点对应的事务日志,并且根据历史的事务日志进行数据重放,得到该时间点的数据状态。这个能力被称为“时间旅行”。

那么,Delta Lake是怎样处理海量元数据的呢?答案很简单,使用 Spark 来处理。所有Delta Lake的元数据均以开源parquet的格式存储,数据与元数据总是相伴相生,无需进行同步。使用 Spark 处理元数据,使得Delta Lake的元数据可以在理论上进行无限的扩展。

Delta Lake还采用索引的机制来优化性能,它采用分区和不同过滤器等的机制,可以跳过数据的扫描。还采用了Z-ordering的机制,可以在对某个列进行优化的同时,使其他列性能牺牲最小化。

为了解决大量小文件的问题,Delta Lake还可以在后台定期对数据布局进行自动优化。如果存储的小文件过多,会自动的将他们合并成大文件,这解决了数据湖中小文件越来越多的问题。

对于数据查询的管控,Delta Lake实现了表级别的权限控制,也提供了权限设置 API,可以根据用户的权限动态对视图进行脱敏。

最后,Delta Lake实现了schema的验证功能来保证数据质量。存在Delta Lake表中的所有数据都必须严格符合其对应的schema,它还支持在数据写入时做schema 的合并演化。当输入数据的 schema 发生变化的时候,Delta Lake可以自动对表的schema进行相应的演化。

总的来说,Delta Lake是在数据湖存储之上,实现了数据仓库拥有的ACID事务特性、高性能数据治理能力以及数据质量保证。同时它是基于开放的存储格式,其本身也是开源的。此外,Delta Lake在架构设计上采用了多层的数据模型来简化设计,一层层逐步提高数据质量。

刚刚进入Delta Lake的数据表,完全对应着数据的原始输入,数据质量比较低的,被称为Bronze表。Bronze表的数据保留也可以设置得长一些,以便从这些表中回溯历史数据。Bronze表中的数据经过过滤清理,就可以得到下一层的Silver表,可以使其与其他表或者维度表进行创意操作,进行数据的扩展。再往下一层,可以根据业务的需求对已经清理过滤好的数据进行聚合,得到Gold表,可以直接支持业务分析、报表等应用。

可以看到,在Delta Lake架构中,数据质量是在不断提升的。相比于lambda 架构,它的设计优势在于在每一层都可以使用PDO统一的数据管道,以事务性的操作对表进行更新,还可以减少数据冗余,从而优化存储和计算的开销。

总体而言,Lakehouse的架构优势有以下几个方面:

  1. Delta Lake的计算和存储天然分离,用户可以进行更灵活的资源调度。
  2. Lakehouse依赖于可以无限扩容的对象存储服务,其元数据的处理也依赖于高扩展性的 Spark 作业,用户无须关心存储容量的问题。
  3. 开放的数据格式可以让数据在不同系统之间的迁移更加顺畅。
  4. 与数据湖相同,Lakehouse同时支持结构化、半结构化与非结构化的数据。
  5. 批流一体。与 lambda 架构不同,Lakehouse能够做到真正的批流一体,从而简化数据的架构。

Databricks公司与阿里云联手打造了全新的产品 databricks 数据洞察,简称DDI。

Databricks 独家优化了databricks runtime引擎,也可以理解为Apache Spark的加强版,它与Delta Lake 融合进阿里云的整套生态系统中,与ECS、OSS、JindoFS进行了很好的结合,提供了全托管高性能的企业级 Spark平台,能够同时支持企业的商业洞察分析以及机器学习训练等。

原文链接

本文为阿里云原创内容,未经允许不得转载。 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/511285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

1688 复杂业务场景下的 Serverless 提效实践

简介:我们主要负责 PC 端 1688.com 以及手机端阿里巴巴 APP,是目前国内最大的 B 类电商交易平台,主要面向 B2B 电商业务的场景,为中小企业提供零售、批发、分销以及加工定制等电商交易渠道。 前言 首先为大家简单介绍一下我们的…

阿里 蚂蚁自研 IDE 研发框架 OpenSumi 正式开源

简介:经历近 3 年时间,在阿里集团及蚂蚁集团共建小组的努力下,OpenSumi 作为国内首个强定制性、高性能,兼容 VS Code 插件体系的 IDE 研发框架,今天正式对外开源。 作者 | OpenSumi 来源 | 阿里技术公众号 经历近 3 …

剖析 kubernetes 集群内部 DNS 解析原理

作者 | 江小南来源 | 江小南和他的小伙伴们引言说到DNS域名解析,大家想到最多的可能就是/etc/hosts文件,并没有什么错,但是/etc/hosts只能做到本机域名解析,如果跨机器的解析就有点捉襟见肘了。在服务器中还有一个配置值得大家注意…

首次公开,阿里云开源PolarDB总体架构和企业级特性

简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家北侠带来了主题为《PolarDB 总体架构设计和企业级特性》的精彩演讲。 在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家 北…

阿里云数据库开源发布:PolarDB HTAP的功能特性和关键技术

简介:在3月2日的阿里云开源 PolarDB 企业级架构发布会上,阿里云 PolarDB 内核技术专家严华带来了主题为《PolarDB HTAP详解》的精彩演讲。在PolarDB存储计算分离架构的基础上,我们研发了基于共享存储的MPP分布式执行引擎,解决了单…

倒计时 2 天!2022 中国算力大会:移动云邀您共见算力网络,创新发展

7 月 29 日 - 31 日由工业和信息化部、山东省人民政府主办的首届中国算力大会将在泉城济南盛大举行!中国移动受邀承办“算力网络,创新发展” 论坛并设立展区分享行业前瞻洞察,构建开放共赢生态7 月 29 日下午,邀您共话算力精彩&am…

什么是好的错误消息? 讨论一下Java系统中的错误码设计

简介:一个好的Error Message主要包含三个部分:Context: 什么导致了错误?发生错误的时候代码想做什么?The error itself: 到底是什么导致了失败?具体的原因和当时的数据是什么?Mitigation: 有什么解决方案来…

阿里巴巴在开源压测工具 JMeter 上的实践和优化

简介:Apache JMeter 是 Apach 旗下的开源压测工具,创建于 1999 年初,迄今已有超过 20 年历史。JMeter 功能丰富,社区(用户群体)庞大,是主流开源压测工具之一。 作者:灵苒、涧泉 Ap…

普洛斯荣获两项“数据中心绿色等级评估”5A级认证

7月29日,由工业和信息化部及山东省人民政府主办的首届中国算力大会在济南成功举办,会上同时公布了本年度“数据中心绿色等级评估”评审结果。普洛斯常熟东南数据中心B栋及普洛斯怀来数据中心3号楼均荣获“数据中心绿色等级评估”(规划类/基础…

深度解读企业云上办公利器「无影云电脑」

简介:信息化进程高速发展的今天,用户桌面办公的需求正不断发生变化:远程办公,BYOD的需求不断增长;快速交付,高效运维的需求接连上升;数据及网络安全的关注度持续提高;整体办公成本在…

云风:不加班、不炫技,把复杂的问题简单化

小学时跟随母亲去成人大学学习编程,初中开始参加信息学奥赛,高中写出人生中第一个成熟软件——Cview,大学发布开源软件风魂系列,后用于网易开发的《大话西游》《梦幻西游》等热门游戏,离开网易创立简悦科技……随着云风…

Timing:在线自习室快速搭建

通过超低延迟的音视频通信技术、视频连麦、弱网传输算法,快速搭建自习场景,提升自习效率。 客户简介 氪细胞主打产品Timing,是国内最早推出,也是规模最大的在线自习室,是新一代的教育与社交融合平台,主打高…

Nacos2.0的K8s服务发现生态应用及规划

简介:Nacos 是阿里巴巴于 2018 年开源的注册中心及配置中心产品,帮助用户的分布式微服务应用进行服务发现和配置管理功能。随着 Nacos2.0 版本的发布,在性能和扩展性上取得较大突破后,社区开始考虑如何提供更加云原生方向的功能和…

webview 和 React Native 中吸顶效果实现

作者 | 👽来源 | Sharing一、前言 在跨端开发中,离不开一些吸顶的交互场景,可以参考淘宝或是京东类电商 app 中一些 tab ,在整个容器滑动的过程中,吸顶效果非常的连贯和丝滑的,当然这些 tab 可能是用 nativ…

AHPA:开启 Kubernetes 弹性预测之门

简介:阿里巴巴云原生团队和阿里达摩院决策智能时序团队合作开发 AHPA 弹性预测产品,该产品主要出发点是基于检测到的周期做“定时规划”,通过规划实现提前扩容的目的,在保证业务稳定的情况下,让你真正实现按需使用。 …

Kubernetes 在科技革命中的演变

作者 | Anthony Spiteri仅在一两年前,对于那些希望通过向现代数据平台转型走在前沿的企业来讲,容器化可是热门词汇。Kubernetes,也被称为 K8s,当时还不成熟,仅处于起步阶段,对更广泛的IT界来说仍然有些陌生…

在阿里巴巴,我们如何先于用户发现和定位 Kubernetes 集群问题?

简介:本文整理自阿里云高级研发工程师彭南光(光南) 在 KubeCon China 2021 大会的演讲实录,分享了阿里巴巴是如何通过自研通用链路探测定向巡检工具 KubeProbe 应对大规模集群的稳定性挑战的。关于阿里云云原生团队在本次 KubeCon 上分享的全部内容沉淀于…

“虎力全开”采购季,存储产品已就位

简介:两百多年前,有个叫吴锡麒的少年,在“江南三月听莺天,买酒莫论钱”。如今又逢暮春三月,一年一度的开年大促——阿里云上云采购季也拉开了序幕。 两百多年前,有个叫吴锡麒的少年,在“江南三月…

武汉高性能计算大会2022举办,高性能计算生态发展再添新动力

武汉高性能计算大会2022会上,华为重磅发布了鲲鹏高性能计算解决方案,为了进一步推进高性能产业的生态繁荣,武汉高性能计算产业联盟成立启动,长江欧拉生态创新中心签约并揭牌,首批鲲鹏科研创新使能计划成员也正式亮相。…

学信网:研究生云复试平台快速搭建上线

通过覆盖全球的音视频通信服务,支撑学信网视频面试稳定运行和效率提升。 案例简介 研究生复试工作碰到疫情,各大院校先后发布复试流程调整通知,将复试工作从线下搬到了线上,这也是历史上的第一次。要在短期内完成视频面试系统的…