Lakehouse : A New Generation of Open Platforms that Unify Data Warehousing and Advanced Analytics
What is Lakehouse
Lakehouse是一种基于低成本和可直接访问的存储的数据管理系统,它提高了传统分析型DBMS的管理功能与性能,如ACID事务,数据版本,审计,索引,缓存与查询优化。Lakehouse是开放架构,它结合了数据湖与数仓的关键优点:数据湖的低成本存储,开放格式特点,数仓的管理与优化功能。Lakehouse非常适合cloud环境,计算存储分离,计算节点可以弹性扩缩容,存储使用S3,Azure Storage廉价的对象存储系统,但是它也适用on-premise环境,使用HDFS存储系统。Lakehouse有如下关键功能:
- Transaction support,支持多个data pipeline并发读写
- Schema enforcement & governance,支持schema的约束和演进,支持数据治理与审计
- BI support,支持BI工具直接操作源数据,改善数据延迟,降低了在湖和仓各自维护一份数据的成本
- Disaggregate storage and compute,存储分离,一线现代化的数仓也有该特性
- Openness,开放数据格式,比如Parquet,支持各种工具与引擎直接访问数据,包括ML,Python/R库
- Support for diverse data types ranging from unstructured to structured data,包括图片,视频,音频,半结构化和文本
- Support for diverse workloads,包括数据科学、机器学习、SQL和分析等
- End-to-end streaming,不需要单独的系统支持流式应用
Why Lakehouse
第一代数仓架构的特点是存储计算耦合,on-premise部署,需要按峰值规划资源,成本高,扩容也不方便;同时,数据集增长迅速,且越来越多的数据集是非结构化的,比如图片,音视频等,数仓根本无法存储与查询。为了解决这些问题,第二代数据分析平台采用data lake + data warehouse的two-tier架构,data lake采用低成本的对象存储S3,Azure Storage或者HDFS,数据从data lake通过ETL/ELT进入data warehouse(Redshift,Snowflake等)。这种two-tier架构存在如下问题:
- Reliability,湖与仓中维护两份数据,保持一致性困难,湖与仓引擎微妙的不同,比如支持的数据类型,SQL方言不同,越来越多的ETL/ELT任务带来更多的failures与bugs
- Data staleness,数据通过ETL/ELT从湖到仓会带来延迟,流式数据管道也不如批处理好维护,无法很好满足在业务运营支持,推荐系统场景中对数据新鲜度的要求
- Limited support for advanced analytics,SQL数据仓库和其API不能很好支持图片,传感器数据,文档等非结构化的数据。类似Tensorflow,PyTorch这样的ML系统需要处理大量的数据集,在数仓中无法运行良好,虽然用户可以直接使用湖中的数据,但是缺乏数据质量,ACID事务,数据版本,索引等支持。
- Total cost of onwership,ETL,存储两份数据都会带来成本提升
该论文提出了一种基于开放数据格式(Parquet,ORC)和data lake的Lakehouse架构和方案,使用single-tier架构简化了数据治理,让用户可以使用统一的方式管理和查询所有数据,并且只需要管理更少的ETL和查询引擎。Lakehouse采用Delta Lake/Apache Iceberg在数据湖上实现了许多数仓有的管理功能(比如,ACID Transactions,Time Travel),并且为优化存储访问提供了有用的工具,例如data clustering和data skipping indices等,除了优化存储层,还使用Delta Engine(也就是后来的Photon)优化了查询引擎层。Lakehouse解决了如下关键挑战:
- Reliable data management on data lakes
- Support for machine learning and data science
- SQL performance
Lakehouse Architecture
从上图可以看出,该Lakehouse系统回归到one-tier架构(天下大势,分久必合,合久必分),包含如下几个部分
- Data Lake,采用廉价对象存储系统,比如Amamzon S3,Azure Storage,也可以使用HDFS。数据采用开放数据格式,文件的形式存储,比如Parquet,ORC
- Metadata,Caching and Indexing Layer,metadata layer提供数据管理,包括ACID事务支持(比如,Delta Lake,Apache Iceberg),sql performance提供caching,indexing,statistics和data layout优化等
- Query Engine,图中没有标识出来,Databricks的Delta Engine(也就是后来的Photon)采用vectorized,SIMD,adaptive等技术提升了查询性能,特别Lakehouse架构中存在的大量uncreated data,string data场景下的查询性能
- API,包括SQL API,Declarative Dataframe API,后者给一些ML库(比如Spark MLlib)提供了更多的优化机会,比如Spark SQL的optimizer,caches,auxiliary data
Metadata Layers for Data Managment
Data lake存储系统,比如S3或者HDFS,只提供low-level的简单操作,对跨多个文件的表的操作是非原子。Delta Lake将table的metadata作为transaction log的parquet文件存储在data lake(Apache Iceberg也采用类似的设计),使其能够扩展到每个表数十亿个对象。Delta Lake / Apache Iceberg在提供与raw data lake相似甚至更好的性能的基础上,提供了非常有用的管理功能,包括食物,zero-copy cloning和表的time travel。此外,它们还可以适配raw data lake的组织,Delta Lake可以将已存在的数据目录的parquet文件转换成一个Delta Lake Table,且不需要做任何数据拷贝,只是增加一个transaction log引用这些文件即可,这使得从第二代架构的raw data lake迁移到Lakehouse架构更加方便和迅速。
Metadata layer是天然的实现data quality enforcement功能的地方,Delta Lake实现了schema enforcement可以对摄入的数据做一些约束(比如,country列只接受固定列表的数据)。Metadata layer也是天然实现数据治理功能的地方,比如access control和审计日志。
不过,由于transaction log存储在对象存储系统中,对象存储的延迟也限制了其TPS,目前也支持单表事务。
SQL Performance in a Lakehouse
Lakehouse为了提供state-of-the-art的SQL性能,在Delta Lake和Delta Engine中实现了以下数据格式独立的优化,
- Caching,在更快的存储介质(SSD,RAM)中缓存云对象存储中的文件,此外cache还可以被转码成更有利于查询引擎使用的形式
- Auxiliary data,列的min-max统计,zone maps,bloom filter index
- Data layout,Delta Lake中提供了单个维度或空间填充曲线(例如,Z-order和希尔伯特曲线)对记录进行排序,以提供跨多个维度的局部性。
Effective Access for Advanced Analytics
Advance Analytics库(Tensorflow,Spark MLlib)往往不是SQL形式,为了既能支持数据访问的灵活性(非SQL接口),又能享受到Lakehouse到优化,Lakehouse提供了Declaretive Dataframe APIs,它能把数据准备计算(data preparation computations)转换成Spark SQL到查询计划,享受到Delta Lake与Delta Engine的优化。
Reference
- https://www.databricks.com/research/lakehouse-a-new-generation-of-open-platforms-that-unify-data-warehousing-and-advanced-analytics
- https://www.databricks.com/blog/2020/01/30/what-is-a-data-lakehouse.html
- https://techcommunity.microsoft.com/t5/analytics-on-azure-blog/simplify-your-lakehouse-architecture-with-azure-databricks-delta/ba-p/2027272
- https://docs.cloudera.com/HDPDocuments/HDP3/HDP-3.1.5/using-hiveql/content/hive_3_internals.html
- https://martinfowler.com/articles/data-monolith-to-mesh.html
- https://docs.databricks.com/delta/data-skipping.html
- https://www.databricks.com/blog/2020/06/24/introducing-delta-engine.html
- https://martinfowler.com/articles/data-monolith-to-mesh.html