Hardwood 已以開放原始碼函式庫的形式發布,旨在最佳化 JVM 環境中 Apache Parquet 檔案的讀取。由 Gunnar Morling 啟動,該專案旨在提供比傳統 Apache Parquet Java 實作更快、更簡單的替代方案,後者通常會帶來大量依賴開銷,並以單執行緒核心讀取器運作。Hardwood 透過提供近乎零依賴的替代方案,並利用多執行緒頁面解碼來最大化 CPU 使用率,來解決這些限制。在 2026 年初啟動五個月後,它已 達到 1.0 版,目前提供讀取功能,寫入支援則規劃於未來版本中推出。
Hardwood 的設計強調資料存取的模組化方法。它提供兩種不同的 API,以滿足不同的工程需求:結構化的 列讀取器 API 用於一般用途的記錄存取,以及批次導向的 欄位讀取器 API 則用於高吞吐量的分析工作負載。與傳統實作依序處理資料不同,Hardwood 將 Parquet 頁面解碼分散到所有可用的 CPU 核心,以降低通常與序列化頁面處理相關的延遲。
列讀取器程式碼:
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 等物件儲存服務的支援,則透過使用者可依需求引入的選擇性依賴提供。
它還實作了最佳化的謂詞評估。透過在篩選掃描期間採用無分支、批次逐次評估,系統可最小化 CPU 分支預測錯誤,這是現代分析資料處理中影響效能的關鍵因素。
除了函式庫本身之外,該專案還包含一個命令列介面 (CLI) 工具,專為開發人員與資料工程師設計。此 CLI 具備互動式文字使用者介面 (TUI),讓使用者無需撰寫樣板程式碼或引入繁重的資料處理框架,即可檢查 Parquet 檔案的結構描述與中繼資料。此工具可作為開發生命週期中驗證檔案完整性與結構的診斷工具。
基準測試結果顯示,Hardwood 在標準實作上實現了顯著的吞吐量提升。在使用 8 個 vCPU 的扁平資料集掃描中,讀取器每秒可達 1650 萬列的吞吐量。效能優勢主要歸功於函式庫能隨可用硬體擴展的能力。在單執行緒設定下,效能受限於序列化解碼;然而,多執行緒方法讓系統能更有效地飽和主機的 I/O 與 CPU 頻寬。Hardwood 透過模組化設計、高效能、多執行緒解碼,以及簡化依賴管理的零強制依賴特性,為 JVM 環境承諾帶來顯著效益。
除了發起人 Gunnar Morling 之外,該專案已吸引 20 位開放原始碼貢獻者,包括來自 Java 領域的資深貢獻者,例如 Andres Almiray 與 Bruno Borges。來自更廣泛社群的整體反饋大多正面,潛在使用者的要求也包含 Parquet 寫入功能。此增強功能已列入 upcoming 路線圖,預計很快就會推出。
Hardwood 1.0 標誌著高效能 JVM 資料處理的重大里程碑,從啟動到首個穩定版本僅花費五個月。該專案在開發過程中使用了 AI 輔助編碼,但設計與程式碼審查流程仍由人類掌控。透過提供零依賴架構與創新的多執行緒解碼引擎,該專案為傳統 Parquet 實作提供輕量卻強大的替代方案。憑藉模組化設計與未來寫入支援的明確路線圖,Hardwood 有望成為資料工程師在分析工作負載中追求最大化資源效率的基礎工具。
0 Comments
Log in to join the conversation.No comments yet. Be the first to share your thoughts.