图1:Gartner2022趋势预测图
-
数据仓库Data Warehouse,用于存储和分析的数据系统,良好的范式来规范管理数据,为企业提供决策支持。 -
数据湖 Data Lake,集中式的数据存储系统,虽然可以存储海量的原始业务数据,但整体缺乏数据结构管理和数据治理能力,极易沦为数据沼泽。同时数据按需进行加载使用,导致数据存储多份而造成资源浪费。 -
湖仓一体Lake House,新型开放式架构,是一种结合数据湖和数据仓库优势的新范式,打通两套体系,数据存储一份,让数据和计算在湖、仓之间流动。
图2:大数据架构演进图
图3:湖仓一体技术架构图
-
MOR实时性高,它包含列存数据文件(.parquet)和行存增量日志文件(avro格式的.log.*)。当更新写入时,会将更新记录写入日志文件中,然后在进行同步或异步合并compaction来生成最新版本的数据文件,同时采用压缩机制来提高合并效率,这样带来2点好处:减少小文件数量和提升读优化,读取端会直接访问最新版本的数据文件即可。
-
Hudi还提供COW引擎,只写列式存储的数据文件(.parquet),每次写入都要创建新版本数据文件,而新版本文件中包含旧版本文件记录和本次写入的记录,也就是全量最新文件。特点在于写入期间进行合并,这将导致写入时存在延迟,同时也会写放大。所以常被用在写少读多的场景中。
-
Hudi提供了自我管理文件大小的技术特性,操作者不需要担心手动维护表数据,通过设定几个简单的参数,便能方便的完成文件大小的自动运维功能。举个例子:当第一个配置值是120MB,第二个配置值是100MB,那么任何小于100MB的文件都被认为是小文件而进行自动合并管理。
-
Hudi高效的更新特性,它采用列式存储(Parquet/ORC)方式,将数据按列组织,支持只写增量或发生变化的数据部分,同时配合写入合并技术将小文件合并成较大的文件,降低了元数据管理的复杂性,整体提高更新写入的效率。
-
增量消费特性,可以实时的处理增量变化的数据。Hudi通过监听数据源的变化,及时捕获数据的新增、更新和删除操作,再将变化的数据按增量方式写入Hudi表中。从而做到对增量数据进行实时的计算。避免全量数据的重复传输和处理,提高数据的处理速度。
-
社区活跃度Hudi相比于Iceberg要活跃,而且国内Commiter数量占比相对高,可持续演进方面会很好。Delta lake贡献主要是Databricks公司,商业化公司风险较高。
图4:亚信科技湖仓一体功能架构图
-
湖仓治理:实现全量的元数据采集,全量、统一的数据开发及编排、全量数据资产的治理、全量数据共享和API的数据服务,端到端的全量数据安全管理。
-
湖仓底座:实现对多数据源的虚拟入湖,支持各类现有数仓,实现全量数据统一存储,数据T+0的快速入湖,按需调用计算引擎支撑各类业务计算场景,基于标准SQL语句提供跨湖、仓的统一数据查询。
(一) Spark多端并发写入MOR表特性
图5:多端并写技术实现
-
修改社区版本的log文件命名规则:在社区log文件命名ID(groupId)+基准文件提交时间戳(baseFileCommitTimestamp)构成的基础上,增加了客户端写入时间戳属性,以避免文件锁冲突问题。
-
更改marker生成方式:修改了marker的生成方式,增加客户端写入时间戳来标记不同客户端写入数据产生的marker,以保证数据的正确性和一致性。
-
新增冲突检查策略:在多个客户端并发写入数据基础文件时,只允许第一个完成写入的客户端提交事务,其他客户端则等待重试写入。避免多客户端将相同数据写入不同filegroup而导致数据重复问题。
(二) Flink架构下Hudi维表关联
图6:Flink维表关联技术实现
-
基于LookupTableSource接口和方法进行扩展实现,同时自定义了Lookup的自定义函数。简单来讲就是依据传入的左表键值(key),在Hudi数据中进行精准查找,如找到对应的结果,则返回关联结果。
-
Hudi提供的MergeOnReadInputSplit功能可以合并基础文件(base file)和日志文件(log file)。通过定期监测Hudi维表的时间线(timeline),如果维表有新的数据写入,则需要启动基础文件和日志文件合并任务,以便得到最新的增量数据,从而保证维表数据的时效性。
图7:基于湖仓一体技术架构
-
开放的Table Service服务层:增强社区Hudi的数据表服务能力,以达到写得快、查得快、稳定且易用的效果;
-
元数据统一管理:这样可以使Hudi本身更好的与外部系统(如:数据中台等)紧密结合,用户使用体验更好;
-
数据表细粒度授权访问:增强社区Hudi的权限管理能力,更好的支撑多租户模式场景;
-
数据版本升级:在Hudi组件升级时,扩展支持Hudi表数据升级能力,在重新拉起业务之前,升级数据、元数据格式,从而达到平滑升级。
-
物化数据:基于Hudi提出的新概念,旨在复杂查询操作的提速场景,可将非常耗时的操作结果(例如JOIN、AGGREGATE)缓存起来,以便在查询时直接复用,从而避免这些耗时操作的重复执行。
参考资料
评论留言