Delta Lake是DataBricks公司推出的一种数据湖方案。Delta Lake以数据为中心,围绕数据流走向(数据从流入数据湖、数据组织管理和数据查询到流出数据湖)推出了一系列功能特性,协助您搭配第三方上下游工具,搭建快捷、易用和安全的数据湖。
背景信息
通常的数据湖方案是选取大数据存储引擎构建数据湖(例如,阿里云对象存储OSS产品或云下HDFS),然后将产生的各种类型数据存储在该存储引擎中。在使用数据时,通过Spark或Presto对接数据分析引擎并进行数据解析。但该套方案存在如下问题:
- 数据导入可能会失败,失败后清理脏数据和恢复作业困难。
- 方案中没有ETL(Extract Transform Load)过程,缺少必要的数据质量监管。
- 方案中没有事务将读和写隔离,致使流式和批式读写无法相互隔离。
Delta数据湖方案如下:
- 在大数据存储层之上提供了数据管理层,该数据管理层等同于数据库中的元数据管理,其元数据随着数据一起存放并对用户可见(例如图 1所示)。
- Delta基于元数据管理引入了ACID,解决了因数据导入失败而产生脏数据和数据导入时的读写隔离问题。
- 元数据存储了数据的字段信息,Delta提供了数据导入时数据校验功能,保证数据质量。
- 事务功能使得批式读写和流式读写能够互相隔离。
说明 ACID指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)。
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 |
|
|
API |
|
|
Hive connector | 支持 | 支持 |
Presto connector | 支持 | 支持 |
Parquet | 支持 | 支持 |
ORC | 不支持 | 不支持 |
文本格式 | 不支持 | 不支持 |
Data Skipping | 支持 | 不支持 |
ZOrder | 支持 | 不支持 |
Native DeltaLog | 支持 | 不支持 |