开发者生态
evening
Hardwood:承诺无强制依赖的高速 JVM Apache Parquet 处理
2026-07-28
1 阅读
约6分钟阅读
作者:Olimpiu Pop
字号:
开源库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
这篇文章对您有帮助吗?
订阅66必读
每日精选科技资讯,直达你的邮箱