开源库 Hardwood 发布,该库旨在优化在 JVM 环境中读取 Apache Parquet 文件的性能。本项目由 Gunnar Morling 启动,目标是为传统的 Apache Parquet Java 实现提供一个更快、更轻量的替代方案,后者通常会带来较重的依赖开销并依赖单线程的核心读取器。Hardwood 通过几乎零强制依赖的实现与多线程页面解码来充分利用 CPU,减少序列化页面处理带来的延迟。自 2026 年初启动以来,项目已经发布了 1.0 版本,当前仅提供了读取能力,对写入的支持列入了后续计划中。
Hardwood 的设计强调模块化的数据访问。它提供了两套针对不同需求的 API:适用于通用记录访问的结构化 Row Reader API 与面向高吞吐分析型工作负载的批量化 Column Reader API。与按顺序处理数据的传统实现不同,Hardwood 将 Parque 页面解码分散到可用的所有 CPU 核心上,从而降低与串行解码相关的延迟。
Row Reader 示例:
try (ParquetFileReader fileReader = ParquetFileReader.open( InputFile.of(path)); RowReader rowReader = fileReader.rowReader()) { while (rowReader.hasNext()) { rowReader.next(); long id = rowReader.getLong("id"); String name = rowReader.getString("name"); LocalDate birthDate = rowReader.getDate("birth_date"); Instant createdAt = rowReader.getTimestamp("created_at"); }}该库采用零强制依赖策略,以实现供应链攻击风险和类路径冲突的最小化。为此,它使用自 Java 9 起提供的最小日志抽象,从而避免引入外部的日志依赖。对特定压缩算法(比如,LZ4、GZip)或对象存储(比如,S3)的支持则通过可选依赖提供,用户按需引入即可。
Hardwood 还实现了优化的谓词评估(predicate evaluation)。在过滤扫描时采用无分支、按批次评估的方法,以尽量减少因分支预测失败带来的 CPU 开销,这在现代分析型数据处理场景中对性能尤为关键。
项目同时提供了面向开发者与数据工程师的命令行工具(CLI)。该 CLI 包含交互式的文本用户界面(TUI),允许用户在无需编写模版代码或引入重量级数据处理框架的情况下,检查 Parquet 文件的 schema 与元数据,作为开发周期中验证文件完整性与结构的诊断工具。
基准测试结果显示,相较于常规模块,Hardwood 在吞吐量上实现了显著提升。在使用 8 个虚拟 CPU 的扁平数据集扫描中,读取器了达到每秒 1650 万行的吞吐量。性能优势主要源自库能够随硬件规模线性扩展。在单线程配置下,性能受限于序列化解码,而多线程方案能更有效地饱和使用主机的 I/O 与 CPU 带宽。Hardwood 以其模块化设计、高性能、多线程解码与零强制依赖的特性,为 JVM 场景带来了实质性收益并简化了依赖管理。
除发起人 Gunnar Morling 外,项目已经吸引了约 20 名开源贡献者参与,其中包括 Java 领域的资深贡献者,如 Andres Almiray 与 Bruno Borges。社区反馈总体是正面的,潜在用户普遍期待加入 Parquet 的写入能力,该项改进已列入路线图并预计很快推出。
Hardwood 1.0 在短短五个月内从构思到发布首个稳定版本,标志着 JVM 高性能数据处理领域的重要进展。项目在开发中使用了 AI 协助编码,但设计与代码评审仍由人类主导。凭借零依赖架构与创新的多线程解码引擎,Hardwood 为寻求在分析型工作负载中最大化资源效率的数据工程师提供了轻量而强大的替代方案。随着模块化设计与写入能力的明确路线图,Hardwood 有望成为 JVM 环境中重要的基础工具。
查看英文原文:Hardwood Promises High-Speed JVM Apache Parquet Processing with Zero Mandatory Dependencies





