今年开源大数据有一个重大的milestone,是全面的走向lake house时代,本次的主题紧接open lake的整体解决方案,会更加具象化的讲述如何在open lake的解决方案中,让用户搭建完全兼容开源生态的数据湖仓的解决方案。
因为今天的主题是open lake,即数据湖仓或湖仓一体,英文是lake house,介绍对lake house的理解或open lake架构的优势。Data Lakehouse湖仓是由Data Lake和Data Warehouse这两种经典的数仓和数据湖架构的融合。
lake house架构兼顾两者的优点,即数据仓库的高性能的数据分析能力和一站式开箱即用的数据管理能力等,包括兼容data lake的完全开放云原生的架构等,这些优势都在lake house中得到体现,lake house是目前下一代数据分析架构的必然趋势。在美国大数据的代表厂商都在一起推动lake house湖仓一体架构的发展,lake house也是大数据AI统一的数据底座,一套data platform上可以支持数据的bi分析,以及新一代的AI的分析,完全打破原来多个不同的计算产品之间的数据的壁垒,在lake house中可以实现一套统一的数据存储。都统一在湖上,统一的数据格式。但是这个数据格式开放,同时又形成一套统一的数据管理。可以有统一的源数据管理、统一的安全管理、权限管理,统一的数据治理等等,可以实现一套数据,然后多份引擎共享,共同访问多个产品之间天然形成的打通。无论是实时流式的分析,还是批示分析、交互式分析、AI分析等,完全实现一份数据copy。这是一套非常高效的作为大数据AI共用的数据底座。
一、开源生态数据湖仓架构体系
主题是基于开源技术体系构建数据库仓的解决方案,首先看数据湖仓在开源技术体系内经典的架构是如何搭建的,各种开源大数据的项目都在积极的拥抱湖仓这个概念,无论是streaming计算,还是spark批示计算,全部都在对接lake house中的主流的数据库格式,包括原数据。总体上把它分为三部分。在技术生态里,第一部分是数据存储领域,第二部分是数据管理领域,第三部分是数据分析。
首先看一下最底层的湖仓的数据存储部分,在数仓存储部分分为三层架构,整个湖仓最底层的存储一般是选用目前比较常见的云原生的对象存储,目前阿里云上的OSS是一个最基本的实现,因为它本身是云的架构,是高可转、高可用,性价比又非常高,所以大家都会选用对象存储作为湖的持久化存储层,接着上面会有一层文件存储,是File Format。标准是Parquet和 ORC,这两种列存格式基本上都支持。在Table Tormat即湖表存储层,前两个月Data breaks宣布收购iceberg公司的tabo,以十亿美元的价格收购一个湖格式厂商,Data breaks主推自己的Data Lake,现在还有Hoody这种比较流行的数据库格式。
阿里云这两年也孵化出一个数据湖的顶级项目apache,这是一款完全面向实时场景,一套全新的数据湖格式的设计,现在整个开源大数据的领域很多焦点都集中在湖存储上,此外在数据管理领域,之前Data breaks收购iceberg的母公司之后,snows flink也开源原数据管理或者湖管理的项目,Data breaks在大会上现场宣布unit carlog的开源,在国内也有一些公司在孵化这个新的apache顶级项目,也是在数据库管理平台上面,像新的apache的creative、 valmoral项目都已经进入apache孵化器。
湖存储湖管理是开源业界还在不断创新的一个领域。在上层用户直接体感到SQL数据分析层,目前业界比较主流的计算引擎,大数据开源的计算引擎都积极拥抱数据湖。整个开源大数据都在围绕lake house进行集体的创新和集体的演进,从而构建新的下一代的数据架构,而且这套架构完全是云原生的一个数据分析架构。
二、阿里云开源大数据湖仓分析方案
lake house方面的创新和演进,站在企业和用户的角度是希望开箱即用的,使用一款业界最流行的或下一代数据架构的数据产品一站式的开箱即用。基于众多的开源技术,搭建一个lake house数据库产品的成本和复杂度非常高,作为国内的超级大厂,有能力自己开源构建自己的产品。对于绝大部分的厂商不太可能去花大精力构建一个数据湖的研发团队,从零到一的研发一个数据的产品的周期是非常长,同时复杂度和成本是非常高的。
阿里云推出Open Lake解决方案,在Open Lake的解决方案中,有一套完全兼容开源生态、开源体验的数据库分析的解决方案,或产品组合解决方案,这套产品是完全开箱即用、services全托管的产品体系。阿里云的用户可以直接开箱即用。与开源大数据在lake house架构是完全对应的,数据存储领域底层的对象存储放在阿里云,最主流的对象存储之上,在文件格式上兼容开源主流的Parquet和ORC两个标准,在数据库格式上,阿里云主推的apache数据格式是一个开源的新的顶级项目,基于apache构建整个的湖表存储,兼容目前业界比较成熟的主流,比如iceberg标准的格式在产品中也是支持的。
在数据管理方面,发布了全新的Data Lake Formation版本,Data Lake Formation简称DLF,承担对整个数据湖进行数据管理能力,包括原始数据的管理、湖表格式原数据的管理、建表、表的权限、行列权限、数据安全,还有对整个湖上数据进行定期做后台的数据维护、数据优化、数据分层等,用户能够开箱即用数据库产品,在上层的数据分析领域,希望业界开源的引擎都可以去分析数据库的数据。阿里云官方的两款开源大数据产品有实时计算Flink和DLF。
这是两款主流的开源大数据产品,分别在这两款产品中都和Open Lake做无缝的集成和对接,实际上Flink对Open Link上的数据进行实时的加工,或者流批体的加工,可以使用DLF,推出service list等专项的产品,这些产品可以对Open Lake上的数据进行批示的加工、海量数据的分析以及实时交互式的分析等。基本上通过两款主流的DLF和Flink可以完整的实现对整个Open Lake上数据的分析。
三、Apache Paimon -OpenLake统一湖表存储
整个完全对标开源的技术体系构建阿里云上的开源大数据的湖仓一体的分析产品。接下来介绍重点核心技术使用开源的技术搭建湖仓,这里面有很多关键的技术,尤其在数据存储、数据管理和数据分析上。最后用一个完整的demo展示让这几个产品协同做湖仓分析,首先是数据存储领域,即湖存储领域的核心apache,这是一个比较新的技术,iceberg、Hive是比较成熟的湖存储。
回顾整个开源大数据的发展历史阶段,首先是Hive是hadoop时代的开源数仓的形态,Hive的本质是基于文件管理为核心存储,Hive中的数据就是ORC&Parquet数据,HMS做源数据管理,可以在Hive上玩各种数仓,包括partition分区、回刷等玩法,这个过程最主要的问题是它比较简单,就是一套apend only做离线数仓,它数据不支持更新,也不支持相对复杂一点的高级点的事物,从Hive演进到第一代湖存储的标准iceberg,iceberg data湖存储解决了Hive存在的一些痛点。
比如Hive上数据不支持更新。Iceberg支持数据的批量更新,同时也支持ACID的事务型的能力,也支持多版本管理,这样用户可以在iceberg进行time travel时间旅行,一定程度上解决了离线数仓的大部分的问题,所以iceberg迅速走红。本质上iceberg是面向批处理理念的湖存储格式,iceberg虽然支持数据更新,但是是以批量的模式进行的,就是定期把一些增量的数据跟全量数据进行merge实现更新,在这种架构下,数据时效性还是有天花板,它没有办法做到特别快的更新,也没有办法做到partial局部更新,实时数据的入湖是有瓶颈,这就是选择Paimon作为下一代湖存储的原因。因为Paimon是一款面向update。
Paimon可以面对流式更新,也可以解决批示更新和支持删除,因为它底层也是用像数据库DB中经典的LSM的架构。同时Paimon完全可以实现和目前开源所有apache顶级的大数据项目的对接,包括Olab的分析,在性能上也具备非常多的实时化的优势,所以Open Link项目整个解决方案选择最新一代的Apache Paimon作为湖表统一的图表格式。
Paimon是一个很新的项目,因为它最早孵化于另一个著名的项目Apache Flink,阿里云是Apache Flink最主要的推动者,早期在Flink里孵化项目的时候,目的是希望推出一款面向实时更新、实时数据分析的数据库格式,推出之后,不希望对这个项目有更多的限制,也不希望它仅局限在Apache Flink之中,所以把它从这个项目里独立,放到Apache孵化器中进行独立孵化。经过一年的努力,将这个项目重新的孵化成Apache顶级项目,更名为Apache Paimon,这就是Apache Paimob的来源。
目前Apache Paimon已经在国内得到非常多公司的响应,国内新能源汽车公司把车联网的数据也放入到Paimon,Paimon最新的版本支持将数据snapshot种iceberg格式,兼容iceberg的数据的使用,方便iceberg的用户去切入到Paimon之中,接下来要发布Paimon最重大的milestone1.0版本,全面支持对AI能力的兼容和支持。
希望Paimon能够作为大数据和AI统一的湖格式存储,Paimon最核心的能力就是流批一体的读写存储能力。这个是最底层最核心的一个能力,也是性能的优势所在,Paimon是一款面向streaming update的场景设计的,自然支持batch处理和流读写,可以非常容易的将上游各种数据库、消息队列、更新的数据实时同步到Paimon中,Paimon支持做实时的镜像数据可以实时入湖,在湖中可以使用Flink做实时的更新,也可以使用Spark做批量的处理。这些数据结果也可以使用StarRorks等开源的Olap引擎进行快速的高性能的Olap的分析,整个过程可以实现全链路的实时化和实现数据的回刷等等。
整个使用Paimon就可以实现整个一站式的实施离线一体化的互仓解决方案,通过关键的数据看Paimon的数据结果,两组测试;
第一组测试是测流式更新的场景的能力,上游的数据如何快速更新到入湖之中,这是第一个最重要的场景.
第二组测试是做一些批量入湖,把大量的数据灌入到Paimon中,同时在采用Spark Tpch最经典的批处理的数据分析,观察真实性能。第一组数据中,通过Tpch的工具把数据先灌入到一条数据到MySQL,再通过MySQL cdc输Flink cdc把买数据实时入湖,在场景中Paimon相对于hoody和iceberg来说是有两三倍以上的性能的优势,Paimon最主要的优势在于数据的更新场景,iceberg基本上是跑不出来这么快的更新的。第二个用Spark做批处理的批示入湖、批示数据分析的场景。
即使在批的经典场景中,Paimon也相对于iceberg和Hoody有将近两倍左右的性能的优势,这些测试都是真实的数据场景,Paimon在核心性能上是有非常大的优势。Paimon的这些功能在阿里巴巴内部已经开始有很多的业务,真实的在生产环境下运行,这个技术虽然很新,但是阿里内部的各种电商的场景也有很多的技术架构的升级都开始基于Paimon的来做,在阿里内部有A Lake的项目也是采用同样的技术架构,在淘宝、天猫内部的业务上进行大规模的上线,Paimon除了支持大数据bi场景的结构化数据的存储,其实它可以支持非结构化数据的管理,Paimon1.0下一个milestone将正式发布Object Table的概念,Object Table是Google引出的新的理念,用结构化数据表存储非结构化数据的原信息。
在数据库上除了有关系型的表,还有一些像图片、语音、视频这种非结构化数据文档等等,这些数据虽然本身是非结构化的,但是它的原数据是结构化的,(文件大小、文件修改时间、文件类型等等)可以把这些海量的数据的Object对象存储中的对象数据的源信息放到Paimon表中进行存储,好处是对原数据有很好的索引,可以采用像数据库的表的SQL的源,或者是python的语言去分析获取原数据,再结合SQL和Python的API去获取数据的内容进行数据处理,就是非结构化数据处理,在大数据AI融合场景下是常见的需求。
比如使用开源的Python、Spark把符合一定条件的图片转换为pdf格式,在这个场景下几行代码就可以做到。比如用Python API的例子,用Paimon Spark去读写Paimon update table获取,比如文件大小超过一兆的一个高质量的图片,且是jpg格式的,或者更新时间在最近一天内,这些图片都可以扫出来完再使用读取pass字段,把pass字段取出来以后再写一个UDF去下载Os。下载这个图片再做一个pdf转换,再把pdf存入到另外一个路径。基于Paimon的整个数据湖的核心的图表存储,统一的图表存储又可以cover结构化数据,也可以cover非结构数据。同时也构建了同时支持SQL的API,也支持Python的API,所以它构建完整的大数据+AI融合的一个生态。所以Paimon在底层支持阿里云的OSS、AWS的Sthree、HDFS,这些都可以存储数据和支持主流的列存格式,包括error,支持所有通过Python API的AI的引擎,通过SQL的API可以支持大数据的引擎等等,Paimon在整个生态上日益完善。
四、Data Lake Formation-OpenLake统一湖仓管理平台
下面介绍核心存储技术Paimon,第二部分介绍另外一项核心的技术数据管理湖管理平台,因为仅有数据和数据的高效存储,以及高效的数据访问能力,用户是用不起来的,Lake House概念从北美这边传过来,由Data Breaks主推。国内行业在自建Lake House都遇到很多的问题,没有办法大规模的真正的使用起来,最大的一个原因是在数据管理平台上的缺失或不足,所以推出一套新的产品Data Link Formation,作为数据库管理平台。
这个产品主要的市场定位或产品定位是做数据湖管理平台,这里面包括三项核心的功能,第一项是最基本的原数据管理,这个原数据管理不仅包括表的管理、数据库表catalog、database、table的管理,同时也包括面向AI场景的Volume Model的非结构化数据的原数据管理,形成统一的大数据AI的原数据管理,第二项是安全的管理能力,作为企业级的数据平台安全Mask是必不可少的一项能力,第二项核心的能力提供一套安全的湖仓数据平台,解决了用户的认证、用户的权限管理等,第三部分是存储的数据优化。
把数据都放在湖上,希望能够得到更高效的一个湖仓数据平台,湖上的各种文件小文件的碎片的整理,包括根据用户对数据访问的pattern做智能的冷热分层,因为把数据存在OSS上,OSS的底层是支持各种冷归档、超级冷归档分层。数据高可很重要,把这个数据智能的放在不同的AZ里,给用户做更好的备份,让数据更加的安全,给用户更好的一个成本,向用户提供这种商业化的能力,这都在Data Lake Formation这个产品,这个产品提供的能力是真正能够让用户对Lake House架构实现开箱即用。
第一个核心的功能原数据服务,主要解决的问题和主要提供功能可以对标到Hive上,它远强于Hive的HMS。首先在原数据管理上兼容HIve HMS。如果你是Hive的用户,已经是存量Hive喜欢用HMS,可以平迁到的DLF上面。DLF支持Hive原数据的兼容,同时它也会支持Paimon数据的原数据管理,以及iceberg原数据管理等主流原数据的管理。此外它后台采用像Polardb或Oceanbae,这种比较商业级的分布式数据库,所以它在原数据的管理上是非常有高扩展性和高性能的。
第二部分是安全能力,它的企业级安全能力是非常强大的。因为DLF本身对安全是非常重要的。分为三A:
第一个A是Authentication用户的认证、第二个是Authorization权限的授权管理、第三个是Audit安全审计。
在DLF中完全包含这方面能力。首先最基本支持完全对接阿里云的ram账号,只要是阿里云的账号,整个认证体系和DLF是完全自动打通的,也正在兼容开源的oIdc协议支持用户自己的安全,个体用户体系能够接入到DLF中,包括在授权管理上也支持ACL和Policy经典的模式。除了支持数据库,表级别的力度也支持行列力度的安全。
包括各种审计日志、有对用户的访问,进行各种日志的记录,方便后面出现问题以后的追踪和排查,此外在整个存储优化方面,在DLF后面会有一个非常强大的原仓分析系统,原仓分析系统可以去分析用户对原数据的各种访问,包括用户SQL处理的各种Pattern,基于这些行为数据可以去分析表和数据是高频使用或者比较关键的,各种存储类型的放置和冷数据归档都可以智能化的做,甚至可以引入一些AI技术帮助用户管理这些数据,同样类似于湖表数据的Compassion,这个是支持更新的,如果大量更新以后会产生一些小文件,对这些数据进行Compassion碎片整理,这些工作都由DLF后台帮用户去做,用户可以简单的把复杂的事情放在产品里边,用户可以很容易使用湖仓产品。
最后DLF还有一个扩展性的能力,未来发展的一个重点就是在AI场景的覆盖,因为AI是未来的一个很重要的计算场景,也就是数据场景。
BI和AI会共享一份数据,数据是一份的,不会把数据分类,Paimon的Object Table可以存储非结构化数据的原数据,把这个功能放到DLF产品后,DLF就会支持Volume的文件Volume的管理,包括Model的原数据的管理等等,整个大数据的管理都可以统一到湖仓平台中进行覆盖,为用户提供大数据一体化的数据管理能力。
五、OpenLake开源湖仓分析解决方案
最后一部分涉及开源数据分析的解决方案,数据存储、数据管理都是在数据层,也就是Open Lake的底座层,所有的数据都可以高效的存储和全面的管理,在这之上提供开放的Open API,可以对接上层的开源分析引擎,包括实时计算Flink开源大数据平台都可以跟DLF进行产品化的无缝对接,分析、访问、读写Open Lake各种数据,比如实时计算Flink的流批一体的数据湖仓分析能力可以实现整个数据库中数据实时的数据加工链路,从数据的实时入湖到后面的ETL的处理,都可以使用Flink的处理。
Flink今年推出的Materia Table是物化表技术,通过统一的流批一体的API描述,让用户更方便的流批一体的处理湖仓数据。类似通过StarRocks,这是新推出的第一款Service Spark产品,除了分析自己仓内的数据之外,也可以分析Open Lake上的湖上数据,区别于非常高性能的实时化的交互式的分析数据湖中的数据,Flink产生的数据都可以由StarRocks实时分析。
Spark也是可以通过对数据湖上的数据进行加工和ETL处理,Service Spark是今年在云栖大会上新推出的第二款service产品。Service Spark也是可以和StarRocks配合使用,Spark负责加工,StarRocks负责交互式的分析,包括Flink的实时入湖之后,Spark也可以用Spark进行加工,这个完全可以根据用户的使用习惯,选择不同的开源产品进行对同一份数据的统一处理。通过demo看到如何应用Flink 、Spark 、Starworks结合DLF和Paimon建开源数据库仓,完成数据摄取流批ETL数据查询、分析等全链路流程。
首先使用Flink完成数据摄取和流批ETL数据存储在Paimon Table,首先做准备工作,在Flink产品中添加DLF Paimon catalog,创建各分层数据表,通过Yaml方式开发从数据库实时摄取两张数据表。接下来对数据做流ETL完成双流join等操作,每层数据都可进行流读流写。
过程中加工的数据通过数据查询对数据做探查分析。利用EMR Serverless Spark平台处理先前由Flink摄取的两张表,并通过ETL对原始数据进行进一步加工处理,以供下游系统使用。在Serverless Spark工作空间中创建一张明细表,用于归档每日用户的点击事件,选中执行脚本并点击运行,对Flink设计的两张原始表进行联合,并写入以上创建的明细表中,选中执行脚本并点击运行。
在完成ETL脚本执行之后,查询明细表的总记录数,确认脚本执行情况。可以看到,明细表已经有七万条记录,接下来再创建一张数据应用表,用于记录广告的点击次数。同样通过ETL脚本,基于先前创建的明细表统计广告的相关指标,并把数据写入到数据应用表中。在完成ETL脚本执行后,查询一下应用表的前十行记录,可以看到数据已经完成计算并写入新表。
最后查询广告组在昨天分区内的点击次数以及相对应的用户数量,打开云栖分析文件夹,打开广告分析作业,选中查询脚本,点击运行,可以看到每次查询所对应的结果。这就是EMR Serverless Spark平台基于上游Flink数据处理的全过程,最后使用StarRocks对Flink实时写入的数据和Spark离线加工的数据进行湖仓分析。并且结合物化视图对湖上数据进行加速,从而满足越来越实时、越来越极速的AD Hoc分析报表分析需求。
第一步需要创建StarRocks Catalog,以映射DLF 2.0中的Catalog,执行创建Catalog的DDL语句。新建Catalog后,可以在左侧数据目录看到新建的Catalog及其数据库、数据表。第二步分析从Flink实时写入的统数据,统计不同用户群体的实时广告点击率。第三步分析从Spark离线加工写入的统计数据离线(T+1)分析不同年龄、性别的用户数和广告点击数。第四部演示业务逻辑比较复杂且经常多变的时候,业务方可以直接使StarRocks分析底层的明细数据,进行留存率分析。第五步使用StarRocks物化视图对复杂SQL进行加速预处理,重新查询生产的物化视图,性能将会大大提升,可以看到查询性能从5000ms+提升到7ms,demo视频来结束。
Open Lake架构的优势是统一的数据管理和统一的数据存储每一份数据,任何一款产品都无缝的进行对接,在不同的产品之间没有任何的隔阂,可以实现完整的开源的湖上分析的体验。使数据湖Lake House产品真正的走向生产和成熟。