分享自:

Apache Arrow DataFusion:一种快速、可嵌入、模块化的分析查询引擎

期刊:ACMDOI:10.1145/3626246.3653368

Apache Arrow DataFusion:快速、可嵌入、模块化的分析查询引擎

作者与机构
本论文由Andrew Lamb(InfluxData, Boston, MA, USA)、Yijie Shen(Space and Time, Irvine, CA, USA)、Daniël Heres(Coralogix, Utrecht, The Netherlands)、Jayjeet Chakraborty(UC Santa Cruz, Santa Cruz, CA, USA)、Mehmet Ozan Kabak(Synnada, Austin, TX, USA)、Liang-Chi Hsieh与Chao Sun(Apple, Seattle/Cupertino, CA, USA)共同完成,发表于2024年6月的SIGMOD-Companion ‘24会议论文集。

学术背景
研究领域为数据库系统与在线分析处理(OLAP)引擎技术。传统高性能分析引擎(如Vertica、Spark、DuckDB)采用紧密集成的架构,虽能实现峰值性能,但开发成本高昂且难以复用。随着云计算和AI/ML流水线对弹性计算的需求增长,重复实现查询引擎的弊端日益凸显。Apache Arrow DataFusion应运而生,旨在通过模块化设计、开放标准(如Apache Arrow内存模型和Parquet存储格式)和Rust语言的高效实现,提供兼具性能与可扩展性的解决方案。研究目标包括:(1) 展示模块化引擎如何通过标准接口实现高性能;(2) 定义现代OLAP引擎的关键扩展API;(3) 验证其在实际应用中的竞争力。

研究流程与方法
1. 技术基础构建
- 核心技术栈:基于Apache Arrow的列式内存模型(标准化空值表示、字节序等)、Parquet的列式存储(支持谓词下推和延迟物化),以及Rust语言的零成本抽象和内存安全特性。
- 架构设计(图2):采用分层架构,包括目录与数据源、前端(SQL/DataFrame API)、逻辑计划优化、执行计划生成与优化、流式执行引擎。关键创新在于通过10余个扩展API(蓝色模块)实现定制化,而非重写核心功能(绿色模块)。

  1. 功能实现

    • 查询处理流程
      • 目录与数据源:支持Parquet、CSV等格式,通过TableProvider API实现谓词/投影下推。
      • 前端:SQL解析器(sqlparser-rs)支持复杂语法(如递归CTE);DataFrame API生成与SQL等效的逻辑计划。
      • 优化器:包括逻辑计划重写(如子查询扁平化)和执行计划优化(如排序消除)。
      • 执行引擎:基于Tokio的异步流式处理,支持多核并行(火山模型交换操作符),内存管理通过MemoryPool实现资源隔离。
  2. 性能优化技术

    • 关键算法
      • 排序:基于败者树和归一化键(RowFormat),支持多列排序与磁盘溢出。
      • 聚合:两阶段并行哈希聚合,针对不同基数场景优化。
      • 连接:支持哈希/合并/嵌套循环连接,动态应用连接过滤器。
      • 窗口函数:增量计算与排序复用。
    • 延迟物化:在Parquet扫描中结合行组剪枝和布隆过滤器,仅解码必要数据(图3示例)。

主要结果
1. 性能基准测试(表1、图5-7):
- ClickBench:DataFusion在选择性谓词查询(如q2、q8)中优于DuckDB(最高6.91倍),但高基数分组(如q19)落后2.36倍。
- TPC-H:部分查询(如q4、q9)因谓词下推优势更快,但连接顺序优化不足导致q17慢1.35倍。
- H2O-G:CSV解析优化使多数查询略优,但corr聚合函数效率待提升。
- 多核扩展性(图7):在192核下,低/中基数查询(如q28)接近线性加速,高基数查询因协调开销出现性能下降,与DuckDB趋势一致。

  1. 实际应用案例(第3章):
    • 领域专用数据库:InfluxDB 3.0(时序)、Coralogix(日志分析)通过扩展API实现定制化。
    • Spark加速:通过DataFusion Comet替换JVM执行引擎,实现零拷贝Arrow数据交换。
    • 表格式集成:Delta Lake/Iceberg利用DataFusion实现谓词下推和文件合并。

结论与价值
1. 科学价值:
- 证明模块化设计可通过开放标准(Arrow/Parquet)和精细的API边界(如目录、UDF、执行计划扩展)实现与紧耦合系统相当的性能。
- 提出“解构数据库”(Deconstructed Database)范式,类比LLVM对编译器生态的革新,推动高性能数据基础设施的组件化复用。

  1. 应用价值:
    • 降低领域专用系统开发成本(如时序、流处理),用户可聚焦增值功能而非重写OLAP引擎。
    • 促进生态协同,避免数据格式转换开销(如Lance直接操作Arrow数据)。

研究亮点
1. 方法创新:
- 扩展性设计:通过逻辑/执行计划重写API(第7章)支持深度定制,如Spark特定语义覆盖。
- 性能优化组合:将向量化执行、流式处理与Rust零成本抽象结合,实现单核效率与多核扩展性平衡。

  1. 行业影响:
    • 已被商业产品(如InfluxDB 3.0)和开源项目(如Delta-RS)采用,验证其工业强度。
    • 推动Apache Arrow生态成为分析系统的“通用语言”,减少数据移动成本。

其他价值
- 社区驱动:350+贡献者参与开发,反映开放治理模式(Apache 2.0许可)的技术可持续性。
- 未来方向:计划优化连接排序(#7949)、高基数聚合(#5546),并探索事务处理与分布式KV存储的模块化实现。

上述解读依据用户上传的学术文献,如有不准确或可能侵权之处请联系本站站长:admin@fmread.com