Delta Lake
DataBricks公司推出的数据湖解决方案。
流批一体的Data Lake存储层,支持update/delete/merge
写入仅支持spark,支持dataframe的批和流写入,以及SQL的insert或insert overwrite
查询支持spark和presto
设计思路
提供流批一体的数据处理。
优点
(1)支持多种分析引擎
(2)支持较快的upsert/delete
(3)存储层廉价
(4)小文件管理compaction
(5)支持流批读写
(6)表格式演进
(7)ACID语义保证,多版本保证
(8)支持python接口
Iceberg
Netflix开源的用于跟踪超大规模表的新格式,专为对象存储(S3)而设计。
设计思路
iceberg提供高性能的分析和可靠的数据管理,完美地解耦了计算引擎和存储引擎,便于多样化计算引擎和文件格式,很好地完成了数据糊架构中Table Format这一层的实现,因此更容易成为Table Format层的开源事实标准。核心抽象对接新的计算引擎的成本比较低,并且提供先进的查询优化功能和完全的 schema 变更。
iceberg也朝着流批一体的数据存储层发展,manifest和snapshot的设计,有效地隔离不同transaction的变更,非常方便批处理和增量计算。
优点
(1)Meta管理可扩展
(2)通用的ACID
(3)抽象性极佳且通用
(4)Meta性能佳,非partition字段可高效过滤,文件级别统计信息用于过滤
(5)减少FS API语义依赖,可扩展到S3
(6)iceberg项目背后的社区资源非常丰富。国外的Netflix、Apple、Linkedin、Adobe等公司都有PB级别的生产数据运行在iceberg上。
Hudi
提供fast upsert/delete和compaction功能,支持Upserts、Deletes和Incremental数据处理,支持三种数据写入方式:Upsert、Insert和Bulk_Insert
设计思路
Hudi设计初衷是为了incremental的upsert,更注重于高效率的 Upsert 和近实时更新,提供了 Merge On Read 文件格式,以及便于搭建增量 ETL管道的增量查询功能。
优点
(1)支持增量拉取
(2)严格Table Schema
(3)优秀的可拓展性
(4)支持多种分析引擎
(5)支持快速upsert/delete
功能对比
如下图所示:
性能对比
从以下方面探索三个组件的性能对比
查询性能
基于1TB的数据集作测试,得到如下数据:
从查询测试数据可看出
(1)iceberg在分析型查询性能上是性能最好的
(2)hudi由于索引的设计,在点查上表现出最优的性能
(3)delta lake在以上查询类型均表现平平
写性能
基于写入100GB数据作测试,得到如下数据
从写入测试数据可以看出
(1)iceberg在bulk insert和incremental insert表现最优异
(2)hudi在update和delete场景对比其他的表格式有非常明显的优势
(3)delta lake表现稳定,没有在任何一项测试中领先
合并性能
也就是compaction,主要是处理过程中产生的小文件的合并,对于维护性能来说非常重要。
以下是一些合并指标数据
从以上数据可看出
(1)iceberg这种以元数据为中心的架构使得compaction更高效
(2)hudi因为索引的机制,compaction需要消耗最多资源
(3)Delta Lake表现相当不错,但资源开销略高于Iceberg