ライブラリ / SDK
apache/hudi avatar
apache/hudi

Apache Hudiの更新履歴をテーブル運用へ組み込む

ビッグデータのアップサート、削除、増分処理。 Apache Hudi Apache Hudi は、複数のクラウド データ環境にわたってデータの取り込み、インデックス付け、保存、提供、変換、管理を行うための、高性能オープン テーブル形式に基づいて構築されたオープン データ レイクハウス プラットフォームです。

スター 6,245フォーク 2,518JavaApache-2.0

ひと目でわかる

これは何?
Apache Hudiはクラウドストレージ上のオープン形式を使い、取り込み、インデックス、アップサート、削除、増分処理を扱うデータレイクハウス基盤だ。SparkとFlinkのビルド条件が実装選択を左右する。
誰に向いている?
クラウド上のテーブルに更新・削除を取り込み、スナップショット、増分、変更データキャプチャ、タイムトラベルを使い分けたいデータ基盤チームにはHudiが候補になります。単純な追記だけのファイル置き場や、Spark・Flinkの運用条件を持たない環境では機能の負担が勝ちます。
商用利用できる?
できます。Apache-2.0 は寛容なライセンスで、著作権表示とライセンス表示を残せば、使用・改変・販売が可能です。
今もメンテナンスされている?
されています。直近 1 日以内に新しいコミットがあります。
何の言語で書かれている?
主に Java です(GitHub の言語統計による)。

回答はプロジェクトの GitHub データ(最終同期:2026年9月15日)と当サイトの分析に基づくもので、法的助言ではありません。

オープンソース詳細解説

README が説明する Hudi の位置づけ

README の冒頭は、Apache Hudi を高性能なオープンテーブルフォーマットの上に構築されたオープンなデータレイクハウスプラットフォームと説明しています。プラットフォームの目的として、複数のクラウドデータ環境にわたってデータを取り込み、インデックスし、保存し、提供し、変換し、管理することが挙げられています。リポジトリの説明文はもっと短く、ビッグデータにおけるアップサート、削除、およびインクリメンタル処理です。README は特定のクラウドベンダーを挙げておらず、高性能という主張のベンチマークも示していません。

取り込みとストレージの機能

取り込みに関して、README は Apache Spark および Apache Flink ユーザー向けの組み込み取り込みツール、半ダースのファイル形式、データベース変更ログ、ストリーミングデータシステムへの対応を挙げ、外部データソースを取り込むための Apache Kafka シンクにも言及しています。ストレージについては、行と列のデータをサポートする最適化されたストレージ形式、変更履歴を追跡するタイムラインメタデータ、統計情報を使ってファイルサイズとレイアウトを自動管理する機能、データのバージョニングとリカバリのためのセーブポイント、スキーマ追跡と進化を説明しています。これらは README の記述であり、ここでは独立に検証していません。

インデックスと書き込み

インデックスセクションでは、スナップショットクエリを高速化し、書き込みによって自動的に維持されるスケーラブルなインデックスサブシステムを説明しています。ファイルリスト、列レベルおよびパーティションレベルの統計情報を追跡し、行指向ファイル形式とブルームフィルタに基づくレコードレベルインデックス機構を含みます。また、式インデックスを使ってテーブル上で論理パーティショニングを行い、ストレージ上の物理パーティショニングから分離するとも述べています。書き込みについては、ロールバックとリストアを備えたアトミックコミット、レコードレベルインデックスによる高速アップサートと削除、ライターとクエリ間のスナップショット分離、リレーショナルデータモデルのための楽観的並行制御(読み取り・変更・書き込みスタイルの一貫した書き込み)、および順序外・遅延データを扱うストリーミングデータモデルのための非ブロッキング並行制御を列挙しています。

クエリタイプ

Hudi は単一のテーブルに対して5種類のクエリを文書化しています。スナップショットクエリは最新のコミット状態を表示し、該当する場合はインデックスで高速化します。インクリメンタルクエリは、特定の時点以降に挿入または更新されたレコードの最新値を返し、2つの時点間のテーブル状態の差分を取るために使用できます。変更データキャプチャクエリは、特定の時点以降または2つの時点の間に挿入、更新、削除されたレコードの変更ストリームを提供し、各変更レコードの前後イメージを含みます。タイムトラベルクエリは、指定した時点のテーブルビューを提供します。読み取り最適化クエリは、Parquet のような純粋な列指向ストレージと圧縮ポリシーを使ってトランザクション境界を提供し、優れたスナップショットクエリ性能を実現します。README にはクエリ性能の数値は含まれていません。

テーブル管理

テーブル管理セクションは、Spark または Flink のライターに統合するか、独立して動作する自動サービスを扱っています。組み込みの失敗処理を備えた設定可能なスケジューリング戦略、古いバージョンのクリーンアップと保存期間による期限切れ処理でストレージ領域を回収すること、データレイアウトを最適化するためのクラスタリングとスペースフィリングカーブアルゴリズム(プラグ可能なスケジューリング戦略付き)、行指向データを列指向形式に非同期圧縮して効率的なストリーミングライターを可能にすること、同時クエリや書き込みが発生している間も一貫したインデックス構築を維持すること、Apache Hive Metastore、AWS Glue、Google BigQuery、Apache XTable などとのカタログ同期を列挙しています。などという表現はリストが完全でないことを示しており、README はサポートされるすべてのカタログを列挙していません。

ソースからのビルドとテストの実行

ビルドセクションには前提条件として、Unix 系システム(Linux、Mac OS X など)、Java 11 または 17、Git、Maven 3.6.0 以上が挙げられています。例示コマンドはリポジトリをクローンし、mvn clean package -DskipTests -Dspark3.5 -Dflink2.1 を実行し、いくつかの設定フラグを付けて Spark シェルを起動します。README には、異なる Spark および Scala バージョン向けの Maven オプションの表があり、Spark 4.x は Scala 2.13 でビルドし Java 17 が必要と注記されています。Flink のデフォルトプロファイルは 2.1 で、2.0、1.20、1.19、1.18 のオプションがあります。テスト手順では Maven プロファイルを使用します。単体テストは -Punit-tests、機能テストは -Pfunctional-tests、統合テストは -Pintegration-tests verify です。README は Unix 系システムとだけ述べており、それ以上の OS サポートを指定していません。

編集部の結論

クラウド上のテーブルに更新・削除を取り込み、スナップショット、増分、変更データキャプチャ、タイムトラベルを使い分けたいデータ基盤チームにはHudiが候補になります。単純な追記だけのファイル置き場や、Spark・Flinkの運用条件を持たない環境では機能の負担が勝ちます。最初にJava 11または17、Maven 3.6.0以上でmvn clean packageを実行し、SparkとFlinkのプロファイル、タイムライン、クリーンアップ設定を実データで確認してください。

公式情報源

  1. Official documentation
  2. Official README
  3. Project repository
  4. Release notes
コミュニティノート

コミュニティノート