Delta Lake是DataBricks公司推出的一种数据湖方案。Delta Lake以数据为中心,围绕数据流走向(数据从流入数据湖、数据组织管理和数据查询到流出数据湖)推出了一系列功能特性,协助您搭配第三方上下游工具,搭建快捷、易用和安全的数据湖。

背景信息

通常的数据湖方案是选取大数据存储引擎构建数据湖(例如,阿里云对象存储OSS产品或云下HDFS),然后将产生的各种类型数据存储在该存储引擎中。在使用数据时,通过Spark或Presto对接数据分析引擎并进行数据解析。但该套方案存在如下问题:
  • 数据导入可能会失败,失败后清理脏数据和恢复作业困难。
  • 方案中没有ETL(Extract Transform Load)过程,缺少必要的数据质量监管。
  • 方案中没有事务将读和写隔离,致使流式和批式读写无法相互隔离。
Delta数据湖方案如下:
  • 在大数据存储层之上提供了数据管理层,该数据管理层等同于数据库中的元数据管理,其元数据随着数据一起存放并对用户可见(例如图 1所示)。
  • Delta基于元数据管理引入了ACID,解决了因数据导入失败而产生脏数据和数据导入时的读写隔离问题。
  • 元数据存储了数据的字段信息,Delta提供了数据导入时数据校验功能,保证数据质量。
  • 事务功能使得批式读写和流式读写能够互相隔离。
说明 ACID指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
图 1. 数据仓库与数据湖
delta_data
Data Warehouse、Data Lake和Delta Lake对比如下所示。
对比项 Data Warehouse Data Lake Delta Lake
架构 计算存储一体或分离 计算存储分离 计算存储分离
存储管理 严格、非通用 原生格式 通用格式、轻量级
场景 报表、分析 报表、分析、数据科学 报表、分析、数据科学
灵活性 较高
数据质量和可靠性 很高 较高
事务性 支持 不支持 支持
性能 较高
扩展性 依赖于具体实现
面向人员 管理人员 管理人员、数据科学家 管理人员、数据科学家
成本

适用场景

Delta适用于云上数据湖数据管理解决方案。如果您存在以下场景,可以使用Delta:
  • 实时查询:数据实时从上游流入Delta,查询侧即可查询该数据,例如,在CDC场景下,Spark Streaming实时消费binlog时,使用Delta merge功能,实时将上游的数据通过merge更新到Delta Lake,然后可以使用Hive、Spark或Presto实时查询。同时,由于支持ACID,保证了数据的流入和查询的隔离性,不会产生脏读数据。
  • 删除或更新,GDPR(General Data Protection Regulation):通常数据湖方案不支持数据的删除或更新。如果需要删除或更新数据,则需要把原始数据清理掉,然后把更新后的数据写入存储。而Delta支持数据的删除或更新。
  • 数据实时同步,CDC(Change Data Capture):使用Delta merge功能,启动流作业,实时将上游的数据通过merge更新到Delta Lake。
  • 数据质量控制:借助于Delta Schema校验功能,在数据导入时剔除异常数据,或者对异常数据做进一步处理。
  • 数据演化:数据的Schema并非固定不变,Delta支持通过API 方式改变数据的Schema。
  • 实时机器学习:在机器学习场景中,通常需要花费大量的时间用于处理数据,例如数据清洗、转换、提取特征等等。同时,您还需要对历史和实时数据分别处理。而Delta简化了工作流程,整条数据处理过程是一条完整的、可靠的实时流,其数据的清洗、转换、特征化等操作都是流上的节点动作,无需对历史和实时数据分别处理。

与开源Delta Lake对比

EMR-Delta Lake丰富了开源Delta Lake的特性,例如对SQL和Optimize的支持等。下表列出了Delta Lake的基本特性,并对比EMR-Delta Lake与开源Delta Lake(0.6.1)。

特性 EMR-Delta 开源Delta
SQL
  • ALTER
  • CONVERT
  • CREATE
  • CTAS
  • DELETE
  • DESC HISTORY
  • INSERT
  • MERGE
  • OPTIMIZE
  • UPDATE
  • VACUUM
  • SAVEPOINT
  • ROLLBACK
  • CREATE
    说明 建表示例:CREATE TABLE <tbl> USING delta LOCATION <delta_table_path>
    • 仅支持基于已有的Delta目录建表。
    • 建表时请不要指定Schema。
  • CONVERT
  • DESC HISTORY
  • VACUUM
API
  • batch read/write
  • streaming read/write
  • optimize
  • delete
  • update
  • merge
  • convert
  • history
  • vacuum
  • savepoint
  • rollback
  • batch read/write
  • streaming read/write
  • delete
  • update
  • merge
  • convert
  • history
  • vacuum
Hive connector 支持 支持
Presto connector 支持 支持
Parquet 支持 支持
ORC 不支持 不支持
文本格式 不支持 不支持
Data Skipping 支持 不支持
ZOrder 支持 不支持
Native DeltaLog 支持 不支持