Hardwoodは、JVM環境におけるApache Parquetファイルの読み取りを最適化するために設計されたオープンソースライブラリとしてリリースされました。Gunnar Morling氏によって開始されたこのプロジェクトは、大きな依存関係のオーバーヘッドを引き起こしやすく、シングルスレッドのコアリーダーで動作する従来のApache Parquet Java実装に代わる、より高速でシンプルな代替手段を提供することを目指しています。Hardwoodは、ほぼゼロ依存の代替手段を提供し、マルチスレッドのページデコードを利用してCPU使用率を最大化することで、これらの制約に対処します。2026年初頭に開始されてから5ヶ月で、バージョン1.0に到達し、現在は読み取り機能を備えており、書き込みサポートは今後のリリースで予定されています。

Hardwoodの設計は、データアクセスのモジュール化アプローチを重視しています。さまざまなエンジニアリング要件に対応するため、2つの異なるAPIを提供します。一般的なレコードアクセスのための構造化された行リーダーAPIと、高スループットの分析ワークロード向けのバッチ指向の列リーダーAPIです。従来の実装がデータを逐次処理するのに対し、Hardwoodは利用可能なすべてのCPUコアにParquetページのデコードを分散させ、ページ処理のシリアライズに伴うレイテンシを低減します。

行リーダーのコード:

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");
    }
}

このライブラリは、サプライチェーン攻撃やクラスパス競合のリスクを最小限に抑えるため、必須依存関係ゼロのプロファイルで設計されています。これを実現するため、バージョン9以降で利用可能なJavaの最小限のロギング抽象化を活用し、外部のロギング依存関係を回避しています。LZ4やGZipなどの特定の圧縮アルゴリズムのサポート、またはS3などのオブジェクトストレージサービスのサポートといった追加機能は、必要に応じてユーザーが取り込めるオプションの依存関係として提供されます。

また、最適化された述語評価も実装しています。フィルタリングされたスキャン中に分岐なしのバッチ単位評価を採用することで、CPUの分岐予測ミスを最小限に抑えています。これは、現代の分析データ処理におけるパフォーマンスにとって重要な要素です。

ライブラリ自体に加え、開発者やデータエンジニア向けに設計されたコマンドラインインターフェース(CLI)ツールもプロジェクトに含まれています。このCLIには、定型コードを書いたり大規模なデータ処理フレームワークを介在させたりすることなく、Parquetファイルのスキーマやメタデータを検査できるインタラクティブなテキストベースのユーザーインターフェース(TUI)が搭載されています。このユーティリティは、開発ライフサイクル中にファイルの整合性や構造を確認するための診断ツールとして機能します。

ベンチマーク結果は、Hardwoodが標準的な実装と比べて大幅なスループットの向上を実現することを示しています。8 vCPUを搭載したフラットデータセットのスキャンでは、リーダーは毎秒1650万行のスループットを達成しました。このパフォーマンス上の利点は、主に利用可能なハードウェアに合わせてスケールするライブラリの能力によるものです。シングルスレッド構成では、逐次デコードによってパフォーマンスが制約されますが、マルチスレッド方式により、ホストマシンのI/OおよびCPU帯域幅をより効果的に飽和させることができます。Hardwoodは、モジュール設計、高パフォーマンス、マルチスレッドデコード、および依存関係管理を簡素化する必須依存関係ゼロのプロファイルを通じて、JVM環境に大きな利点をもたらすことを約束します。

発起人のGunnar Morling氏に加え、このプロジェクトにはすでに20名のオープンソース貢献者が参加しており、Andres Almiray氏やBruno Borges氏といったJava分野のベテラン貢献者も含まれています。コミュニティ全体からの一般的なフィードバックは概ね好意的で、潜在的なユーザーからはParquetの書き込み機能が求められています。この機能強化はすでに今後のロードマップに含まれており、近日中に利用可能になる予定です。

Hardwood 1.0は、高性能JVMデータ処理における重要なマイルストーンであり、開始からわずか5ヶ月で初の安定版リリースに至りました。開発中にはAI支援コーディングが活用されましたが、設計とコードレビューは人間が主導しました。ゼロ依存アーキテクチャと革新的なマルチスレッドデコードエンジンを提供することで、このプロジェクトは従来のParquet実装に代わる軽量かつ強力な選択肢となります。モジュール設計と今後の書き込みサポートに向けた明確なロードマップにより、Hardwoodは分析ワークロードにおけるリソース効率を最大化したいデータエンジニアにとって基盤となるツールになることが期待されます。

About the Author

Olimpiu Pop