摘要:今天我们就来解构数据湖的核心需求,同时深度对比Apache CarbonData、Hudi和Open Delta三大解决方案,帮助用户更好地针对自身场景来做数据湖方案选型。

背景

我们已经看到,人们更热衷于高效可靠的解决方案,拥有为数据湖提供应对突变和事务处理的能力。在数据湖中,用户基于一组数据生成报告是非常常见的。随着各种类型的数据汇入数据湖,数据的状态不会一层不变。需要改变各种数据的用例包括随时间变化的时序数据、延迟到达的时延数据、平衡实时可用性和回填、状态变化的数据(如CDC)、数据快照、数据清理等,在生成报告时,这些都将被写入/更新在同一组表。

由于Hadoop分布式文件系统(HDFS)和对象存储类似于文件系统,因此它们不是为提供事务支持而设计的。在分布式处理环境中实现事务是一个具有挑战性的问题。例如,日常考虑到锁定对存储系统的访问,这会以牺牲整体吞吐量性能为代价。像Apache CarbonData、OpenDelta Lake、Apache Hudi等存储解决方案,通过将这些事务语义和规则推送到文件格式本身或元数据和文件格式组合中,有效地解决了数据湖的ACID需求。

很多用户看到这三种主要解决方案时,将陷入两难的境地,在不同情况下不知怎么选择?今天我们对比了三大方案,帮助用户更好的根据自己的场景选择解决方案。

Apache Hudi

Apache Hudi是Uber为满足内部数据分析需求而设计的项目。快速upsert/delete和compaction功能可以解决许多实时用例。该项目在Apache社区非常活跃,2020年4月取得了最高项目地位。

从Hudi的名字就能看出他的设计目标, Hadoop Upserts Deletes and Incrementals,主要支持Upserts、Deletes和增量数据处理。其关键特性如下:

1.文件管理

Hudi在DFS上将表组织为basepath下的目录结构。表被划分为分区,这些分区是包含该分区的数据文件的文件夹,类似于Hive表。

2.索引

Hudi通过索引机制将给定的HoodieKey(记录键+分区路径)一致地映射到文件id,从而提供高效的upserts。

3.表类型

Hudi支持的表类型如下:

  • 写入时复制:使用专有的列文件格式(如parquet)存储数据。在写入时执行同步合并,只需更新版本并重写文件。
  • 读取时合并:使用列(如parquet) +行(如Avro)文件格式的组合存储数据。更新记录到增量文件,并随后压缩以同步或异步生成列文件的新版本。

4.查询类型

Hudi支持三种查询类型:

  • 快照查询:查询是在给定的提交或压缩操作之后对表进行快照的请求。利用快照查询时,copy-on-write表类型仅公开最新文件切片中的基/列文件,并保证相同的列查询性能。
  • 增量查询:对于写入时复制表,增量查询提供自给定提交或压缩后写入表的新数据,提供更改流以启用增量数据管道。
  • 读取优化查询:查询查看指定提交/压缩操作后表的最新快照。只暴露最新文件版本的base/columnar文件,保证列查询性能与非Hudi列表相同。仅在读取表合并时支持

5.Hudi工具

Hudi由不同的工具组成,用于将不同数据源的数据快速采集到HDFS,作为Hudi建模表,并与Hive元存储进一步同步。工具包括:DeltaStreamer、Hoodie-Spark的Datasource API、HiveSyncTool、HiveIncremental puller。

Apache CarbonData

Apache CarbonData是三个产品中最早的,由华为贡献给社区,助力华为云产品的数据平台和数据湖解决方案应对PB级负载。这是一个雄心勃勃的项目,将许多能力都集中在一个项目中。除了支持更新、删除、合并操作、流式采集外,它还拥有大量高级功能,如时间序列、物化视图的数据映射、二级索引,并且还被集成到多个AI平台,如Tensorflow。

CarbonData没有HoodieKey设计,不强调主键。更新/删除/合并等操作通过优化的粒度连接实现。CarbonData与Spark紧密集成,在CarbonData层中有很多优化,比如数据跳跃、下推等。在查询方面,CarbonData支持Spark、Hive、Flink、TensorFlow、pyTorch和Presto。一些关键特性包括:

1.查询加速

诸如多级索引、压缩和编码技术等优化旨在提高分析查询的性能,这些查询可能包括过滤器、聚合和用户期望PB级数据的点查询响应时间亚秒级。高级下推优化与Spark深度集成,确保计算在靠近数据处执行,以最小化数据读取、处理、转换和传输的数量。

2.ACID:数据一致性

没有关于故障的中间数据,按快照隔离工作,分离读取和写入。对数据(查询、IUD【插入更新删除】、索引、数据映射、流式处理)的每个操作均符合ACID标准。支持使用基于列和行的格式进行近实时分析,以平衡分析性能和流式采集以及自动切换。

3.一份数据

通过集成Spark、Hive、Presto、Flink、Tensorflow、Pytorch等多种引擎。数据湖解决方案现在可以保留一个数据副本。

4.各种优化指标

其他索引,如二级索引、Bloom、Lucene、Geo-Spatial、实体化视图,可以加速点、文本、聚合、时间序列和Geo空间查询。通过Polygon UDF,CarbonData支持地理空间数据模型。

5.更新和删除

支持合并、更新和删除操作,以启用诸如更改-数据-捕获、缓慢更改-维(SCD-2)操作等复杂用例。

6.高扩展性

Scale存储和处理分离,也适用于云架构。分布式索引服务器可以与查询引擎(如spark, presto)一起启动,以避免跨运行重新加载索引,并实现更快和可扩展的查找。

Delta【开源】

Delta Lake项目于2019年通过Apache License开放源码,是Databricks解决方案的重要组成部分。Delta定位为数据湖存储层,集成流式和批处理,支持更新/删除/合并。为Apache Spark和大数据工作负载提供ACID事务能力。一些关键特性包括:

1.ACID事务:

Delta Lake将ACID事务带到您的数据湖中。Delta Lake存储一个事务日志,以跟踪对表目录所做的所有提交,以提供ACID事务。它提供可串行化的隔离级别,确保数据在多个用户之间的一致性。

2.方案管理与执行

Delta Lake利用Spark分布式处理能力处理所有元数据,通过提供指定模式和帮助实施模式的能力,避免不良数据进入数据湖。它通过提供合理的错误消息来防止不良数据进入系统,甚至在数据被集成到数据湖之前就进入系统,从而防止数据损坏。

3.数据版本控制和时间旅行

将对数据湖中的数据进行版本控制,并提供快照,以便您可以像该快照是系统当前状态一样查询它们。这有助于我们恢复到旧版本的数据湖中进行审计、回滚和类似的操作。

4.开放格式

Delta Lake中的所有数据都以Apache Parquet格式存储,使得Delta Lake能够利用Parquet本地的高效压缩和编码方案。

5.统一的批量流式sink

近似实时分析。Delta Lake中的表既是一个批处理表,也是流源和sink,为Lambda架构提供了一个解决方案,但又向前迈进了一步,因为批处理和实时数据都下沉在同一个sink中。

与CarbonData类似,Delta不强调主键,因此更新/删除/合并都是基于spark的连接函数实现的。在数据写入方面,Delta和Spark是强绑定关系。与Spark的深度集成可能是最好的特性,事实上,它是唯一一个具有Spark SQL特定命令(例如:MERGE),它还引入了有用的DML,如直接在Spark中更新WHERE或DELETE WHERE。Delta Lake不支持真正的数据血缘关系(即跟踪数据何时以及如何在Delta Lake中复制数据的能力),但是有审计和版本控制(在元数据中存储旧模式)。

最后

Hudi在IUD性能和读取合并等功能方面具有竞争优势。例如,如果您想知道是否要与Flink流一起使用,那么它目前不是为这样的用例设计的。Hudi Delta Streamer支持流式数据采集。这里的“流式处理”实际上是一个连续的批处理周期。但从本质上讲,这仍不是一种存粹的流式的采集。该社区由Uber提供,并已开放其所有功能。

Delta的主要优势之一是它能够与Spark集成,特别是其流批一体化设计。Delta拥有良好的用户API和文档。该社区由Databricks提供,它拥有一个具有附加功能的商用版本。

CarbonData是市场上最早的产品,由于物化视图、二级索引等先进的索引,它具有一定的竞争优势,并被集成到各种流/AI引擎中,如Flink、TensorFlow,以及Spark、Presto和Hive。社区由华为提供,所有特性均已开源。

随着新版的发布,这三个都在不断填补他们缺失的能力,并可能在未来相互融合或竞争。当然,也可以把重点放在自己的情景上,构建自身优势的门槛。对这些解决方案进行性能比较有助于更好地了解它们的产品。因此,胜负仍是未知之数。

下表从多个维度总结了这三者。需要注意的是,本表所列能力仅突出2020年8月底的能力。

特性对比表

社区现状(截至2020年8月)

参考信息

1. https://github.com/apache/carbondata

2. https://github.com/delta-io/delta

3. https://github.com/apache/hudi

4. https://cwiki.apache.org/confluence/display/CARBONDATA/

5. https://cwiki.apache.org/confluence/display/HUDI

6. https://hudi.apache.org/

7. https://carbondata.apache.org/

8. https://delta.io/

免责声明:基于对各种参考链接的研究和个人分析,欢迎读者反馈和改进!

翻译自 https://medium.com/@brijoobopanna/comparative-study-of-apache-carbondata-hudi-and-open-delta-49e6e45a2526

点击关注,第一时间了解华为云新鲜技术~

深度对比Apache CarbonData、Hudi和Open Delta三大开源数据湖方案相关推荐

  1. 开源数据湖方案选型:Hudi、Delta、Iceberg深度对比

    文章目录 前言: 共同点 一.Databricks 和 Delta 1.1.Delta的意图,解决的疼点 1.没有 Delta 数据湖之前存在的问题 : 二.Uber和Apache Hudi 三.Ne ...

  2. Apache Hudi 在 B 站构建实时数据湖的实践

    简介: B 站选择 Flink + Hudi 的数据湖技术方案,以及针对其做出的优化. 本文作者喻兆靖,介绍了为什么 B 站选择 Flink + Hudi 的数据湖技术方案,以及针对其做出的优化.主要 ...

  3. 基于Delta Lake构建数据湖仓体系

    直播回放地址:https://developer.aliyun.com/live/249789 导读: 今天很高兴能与大家分享如何通过 Delta Lake 构建湖仓架构. 全文将围绕以下四个部分展开 ...

  4. 查询性能较 Trino/Presto 3-10 倍提升!Apache Doris 极速数据湖分析深度解读

    从上世纪 90 年代初 Bill Inmon 在<building the Data Warehouse>一书中正式提出数据仓库这一概念,至今已有超过三十年的时间.在最初的概念里,数据仓库 ...

  5. 大数据Hadoop之——新一代流式数据湖平台 Apache Hudi

    文章目录 一.概述 二.Hudi 架构 三.Hudi的表格式 1)Copy on Write(写时复制) 2)Merge On Read(读时合并) 3)COW vs MOR 四.元数据表(Metad ...

  6. Splunk和ElasticSearch深度对比解析

    随着Splunk越来越被大家熟知和认可,现在市面上也不断涌各种同类产品,作为大数据搜索界的翘楚Splunk和ElasticSearch,绝对值得我们去学习,探索和使用,因此为了造福Splunk的铁粉和 ...

  7. 日志处理两大生态Splunk和ELK深度对比

    随着Splunk越来越被大家熟知和认可,现在市面上也不断涌各种同类产品,作为大数据搜索界的翘楚Splunk和ElasticSearch,绝对值得我们去学习,探索和使用,因此为了造福Splunk的铁粉和 ...

  8. syslog服务器与elk区别_Splunk和ELK深度对比

    随着Splunk越来越被大家熟知和认可,现在市面上也不断涌各种同类产品,作为大数据搜索界的翘楚Splunk和ElasticSearch,绝对值得我们去学习,探索和使用,因此为了造福Splunk的铁粉和 ...

  9. 视频教程-Apache CarbonData线上活动-大数据

    Apache CarbonData线上活动 CSDN讲师名下集合了诸多业界知名讲师的公开课内容,内容涵盖人工智能.大数据.区块链等诸多热门技术领域的最佳技术实践,聚合美团.滴滴.AWS.科大讯飞等知名 ...

最新文章

  1. abstract类中不可以有private的成员_我要告诉你:java接口中可以定义private私有方法...
  2. 海量数据随机抽样问题(蓄水池问题)
  3. 机器学习003-Kernel
  4. 快速启动栏的现实桌面快捷方式
  5. copyonwritearraylist原理_Java集合干货——CopyOnWriteArrayList源码分析
  6. mysql 子表 关联查询语句_mysql查询语句 和 多表关联查询 以及 子查询
  7. VSCode从非根目录编译golang程序
  8. 怪物猎人服务器维护时间,怪物猎人云服务器
  9. 读书和不读书有什么区别呢?
  10. DWR第四篇之对象传参
  11. AI 医生“战疫”在前线
  12. 三段式 matlab,1stopt三段式函数拟合
  13. 【DA】z检验p值的计算
  14. 普通话测试-短文60篇文章,附带拼音(21-30篇)
  15. 南京工资个税计算机,最新南京工资扣税标准
  16. eNSP不同网段主机互联-static
  17. N-vop、S-vop、Packed Bistream
  18. 欧几里得  拓展欧几里得算法 讲解 (Euclid Extend- Euclid Algorithm)
  19. MFC实现弹出模态对话框和非模态对话框(基于对话框)
  20. 【正点原子FPGA连载】 第二十八章OV5640 DP显示实验 摘自【正点原子】DFZU2EG_4EV MPSoC之嵌入式Vitis开发指南

热门文章

  1. kelvin模型蠕变方程_第二章:黏弹性与波传播——2.4 力学模型和波传播
  2. linux scp 输入密码,Linux scp远程复制数据不需要输入密码
  3. arch 安装准备--包管理的使用pacman
  4. 演练:调试 Windows 窗体
  5. linux每日命令(1):gzip命令
  6. CodeFirst实体类中,为什么都把ICollectionx定义成virtual?
  7. 今天微信小程序发现wx.request不好使了,调试报错: 小程序要求的 TLS 版本必须大于等于 1.2...
  8. python常用第三方库(转载)
  9. Codeforces Gym 100463A Crossings 逆序数
  10. ArcGIS 的 http://localhost:8399/arcgis/rest/services 无法打开,显示404 的解决办法