本期咱们将带来 Hologres 高性能剖析引擎减速查问云数据湖 DLF 的技术原理解析。
随着云服务被承受的水平一直晋升,云用户日益违心将其收集的数据存储在低成本的对象存储里,比方 OSS,S3 等。与此同时,基于云的数据管理形式也失去相应的推广,元数据也一直存储在阿里云 DLF(Data Lake Formation)上。OSS 和 DLF 的联合成就了一种新的数据湖搭建形式。这种基于云存储的数据湖集累的数据规模也一直增长,相应的湖仓一体的需要也孕育而生。湖仓一体架构基于凋谢格局的内部存储,以及高性能的查问引擎,让数据架构灵便、可扩大、可插拔。
Hologres 在湖仓一体场景上与 DLF 人造无缝交融,无需数据导入导出就能实现减速查问由 DLF 治理存储在 OSS 的数据,全面兼容拜访各种 DLF 反对文件格式,实现对 PB 级离线数据的秒级和亚秒级交互式剖析。而这所有的背地,都离不开 Hologres 的 DLF-Access 引擎,通过 DLF-Access 实现对 DLF 元数据以及背地的 OSS 数据进行拜访。另外,通过联合 Hologres 高性能分布式执行引擎 HQE 的解决,拜访 DLF/OSS 的性能失去进一步提高。
Hologres 减速查问 DLF/OSS 次要有以下几个劣势:
- 高性能: 能够间接对 DLF/OSS 数据减速查问,具备秒级响应的查问性能,在 OLAP 场景能够间接即席查问,满足绝大多数报表等剖析场景。
低成本: 用户在在 DLF/OSS 上存储的大量数据,无需迁徙和导入数据而由 Hologres 间接进行拜访。在享受云数据湖的低成本根底之上,也防止了数据迁徙老本。
兼容性: 能够实现以高性能和全兼容的形式拜访各种 DLF 文件格式,反对 CSV、Parquet、ORC、Hudi、Delta 等格局(其中 Hudi、Delta 在 1.3 版本反对)。而这些文件格式又是通用数据湖兼容的。
湖仓一体架构介绍
如图所示是 Hologres 拜访 DLF/OSS 的湖仓一体架构,能够看出整个架构十分简洁:
云数据湖里的数据存储在 OSS,元数据存储在 DLF。当 Hologres 执行一条 Query 去减速查问 DLF/OSS 的数据时,在 Hologres 端:
- Frontend 接管 SQL 申请,并对 SQL 进行解析转化,而后通过 RPC 向 DLF-Access 申请获取 Meta 等相干信息。
- HQE(Hologres Engine)通过 DLF-Access 获取 OSS/DLF 具体的数据相干信息,再返回给 Frontend。
其中 DLF-Access 是一个分布式的数据拜访引擎,由多个平等过程组成,具备横向扩大能力。任何一个过程都能够实现两种角色:
- 解决 Meta 相干的申请,次要负责获取表、分区元数据、文件分片等性能。
-
负责具体读取或写入数据申请,波及列裁剪,数据转换,数据封装等性能。
DLF 表面引擎外围技术创新
基于 DLF-Access 的架构,能做到对 DLF/OSS 的数据高性能减速查问,次要是基于以下技术创新劣势:
1)形象分布式表面
联合 DLF/OSS 的分布式个性,Hologres 形象了一个分布式的表面,来反对拜访包含传统或云数据湖的数据。
2)和 DLF Meta 无缝互通
DLF-Access 和 Data Lake Formation 的 Meta 无缝互通,能够做到 Meta 和 Data 实时获取,反对通过 Import Foreign Schema 命令,同步 DLF 的元数据到 Hologres 的表面,实现表面的主动创立。
3)向量化数据读取及转换
DLF-Access 能充分利用数据湖列存文件的特点进行向量化的数据读取及转换,进一步晋升性能。
4)返回共享式数据格式
DLF-Access 转换后的数据格式为共享式的 Apache Arrow 格局。Hologres 能够间接应用返回的数据,防止额定数据序列化及反序列化的开销。
5)Block 模式 IO
为了防止网络带来的提早及负载,DLF-Access 和 Hologres 的外部传输数据单位为 block,默认为 8192 行数据。
6)编程语言隔离
Hologres 是用 C /C++ 开发进去的云原生 OLAP 引擎。DLF 云数据湖和传统的开源数据湖高度兼容,而开源数据湖大多提供的是基于 Java 的库。应用独立的 DLF-Access 引擎架构能够隔离不同编程语种,即防止了原生引擎和虚拟机之间的高老本转换,又放弃了对数据湖灵活多样的数据格式的反对。
DLF 表面引擎降级到 HQE
下面提到了 Hologres 通过 DLF-Access 进行查问减速 DLF 表面,查问时性能能够做到很好,然而和 Hologres 交互时两头会有一层 RPC 交互,在数据量较大时网络会存在肯定瓶颈。
因而基于 Hologres 已有的能力,Hologres V1.3 版本对执行引擎进行了优化,反对 Hologres HQE 查问引擎直读 DLF 表,在性能上失去进一步的晋升,较晚期版本读取有 30% 以上的性能晋升。
这次要得益于以下几个方面:
1) 节俭了 DLF-Access 两头 RPC 的交互,节俭了一次额定的数据的重散布,在性能上失去进一步的晋升。
2) 复用 Hologres 的 Block Cache,这样屡次查问时无需拜访存储,防止存储 IO,间接从内存拜访数据,更好的减速查问。
3) 能够复用已有的 Filter Pushdown(下推)能力,缩小须要解决的数据量。
4) 在底层的 IO 层实现了预读和 Cache,更进一步减速 Scan 时的性能。
对事务数据湖(Hudi、Delta)的反对
目前 DLF 反对了事务数据湖所用的 Hudi,Delta 等表格局。Hologres 利用 DLF-Access 间接读取这些表中的数据,而不削减任何额定的操作,满足了用户对实时湖仓一体架构的设计需要。
总结
Hologres 通过 DLF-Access 与 DLF/OSS 深度整合,充分利用 Hologres 和 DLF/OSS 的各自劣势,以极致性能为指标,间接减速查问云数据湖数据,让用户更不便高效的进行交互式剖析,同时也极大升高了剖析老本,实现湖仓一体的剖析能力。
作者简介:Xuefu,阿里巴巴资深技术专家,现从事 Hologres 研发工作。
后续咱们将会陆续推出无关 Hologres 的技术底层原理揭秘系列,敬请继续关注!返回主页查看往期精彩内容