レイクハウステーブルフォーマットの三強の中で、Apache Hudiは「いちばん地味だけど、特定の領域では強い」立ち位置にいます。2017年にUberが社内開発し、ライドシェアの大規模で頻繁な更新を支えるために生まれました。「データの更新と削除を、レイクで効率よく扱う」というニーズに、もっとも素直に答えるツールです。

採用人口ではIceberg・Deltaに譲りますが、CDC(Change Data Capture)中心のリアルタイム連携や、IoTのような大量の更新が発生する業務領域では強みを発揮します。設計と使いどころを整理します。

Hudiの基本構造

Hudiは、データファイル(Parquet)とコミットメタデータ(.hoodieディレクトリ)で構成されます。Iceberg/Deltaと似た構造ですが、Hudiの特徴は「2つのストレージタイプ」を使い分けられることです。

ストレージタイプ動作向く場面
Copy-on-Write (CoW)書き込みのたびに該当ファイルを書き直す読み取り中心、更新頻度が中程度
Merge-on-Read (MoR)変更を差分ログに記録し、読み取り時にマージ書き込み頻度が高い、リアルタイム連携

CoWは読み取り性能が高く、シンプル。MoRは書き込み性能が高く、ストリーミング向け。テーブルごとに使い分けられるのが、Hudi独自の柔軟性です。

Hudiの強み:CDCとリアルタイム取り込み

HudiのもうひとつのウリがDeltaStreamerと呼ばれる、CDCに特化した取り込みツールです。Kafkaやデータベースのbinlogから直接Hudiテーブルに書き込むパイプラインを、設定で組めます。

# Hudi DeltaStreamerでKafkaからHudiテーブルを構築する例
spark-submit \
  --class org.apache.hudi.utilities.deltastreamer.HoodieDeltaStreamer \
  ...
  --table-type MERGE_ON_READ \
  --source-class org.apache.hudi.utilities.sources.JsonKafkaSource \
  --target-base-path s3://bucket/orders \
  --target-table orders \
  --op UPSERT

「UPSERT」が標準操作として用意されており、主キーが一致すれば更新、なければ追加という動きが、フレームワーク側で最適化されています。レイクで頻繁にUPSERTする場合、Hudiは設計上のアドバンテージがあります。

Iceberg・Deltaとの比較

IcebergDeltaHudi
強みベンダー中立・メタデータ管理運用成熟・Databricks統合更新・CDC・リアルタイム
標準的な書き込みINSERT/MERGEINSERT/MERGEUPSERT/DELETE/INSERT
ストレージタイプ1種類1種類CoW/MoRの2種類
CDC連携の出来合い標準では限定的標準では限定的DeltaStreamerで最適化
採用人口大・拡大中
主要DWHでの読み取り広く対応広く対応限定的

「IcebergとDeltaに対するHudiの存在意義」を実務で考えると、UPSERT中心の業務領域に絞られます。CDCを大規模に動かす、IoTで毎秒数千の更新が来る、というような場面では、Hudiの設計が刺さります。

クラウドDWHでの対応状況

DWHHudi対応
Databricksサポート(OSS Spark経由)
SnowflakeExternal Tablesで限定的に読み取り
BigQueryBigLake経由で限定的
Athena読み取り対応
EMR/Sparkネイティブ対応
TrinoConnectorで対応

HudiはIceberg/Deltaに比べて、主要DWHでの読み取り対応が遅れています。「同じデータを複数のDWHから読みたい」要件があるなら、Iceberg優位です。クラウドDWHの基本はクラウドDWH入門を参照してください。

運用上のハマりどころ

  • CoWとMoRの使い分け:MoRは書き込み速いが、読み取り時のマージコストがある。コンパクションの頻度で読み取り性能が左右される。
  • 主キー設計:UPSERTの動作が主キー依存なので、設計段階での主キー決定が重要。後から変えにくい。
  • コミット履歴の管理:書き込み履歴が積もる。`cleaner`で古いコミットをクリーンアップする運用を組む。
  • 採用人口の少なさ:Iceberg/Deltaに比べてStack OverflowやGitHubでの情報量が少なく、トラブルシュートが大変。

向く・向かない場面

  • 向く:CDC中心のリアルタイム連携、UPSERTが頻繁な業務領域、IoTのような大量更新、Spark/Flink中心の処理基盤
  • 向かない:分析中心で更新が少ない(→IcebergまたはDelta)、複数DWHから読みたい(→Iceberg)、コミュニティの規模を重視(→IcebergまたはDelta

まとめ

  • Apache HudiはUber発、UPSERT・CDC・リアルタイムに強みを持つテーブルフォーマット。
  • Copy-on-WriteとMerge-on-Readの2つのストレージタイプを使い分けられる。
  • DeltaStreamerでKafkaやbinlogからの取り込みパイプラインを構築できる。
  • 採用はIceberg/Deltaに後塵を拝するが、特定領域(CDC・IoT)では強い選択肢。
  • 「データの更新を、レイクで効率的に扱いたい」が要件の中心なら検討の価値あり。

全体像はレイクハウステーブルフォーマット比較、隣接の選択肢はApache Iceberg とはDelta Lake とはにあります。Hudiの導入や、CDCアーキテクチャの壁打ちは、DE-STKの初回相談(30分・無料)もご利用ください。

よくある質問(FAQ)

Q. UberはまだHudiを使っていますか?

A. はい、Uberの中核データ基盤として現役で動いています。さらに、Onehouseという商用化スタートアップが2022年に創業され、Hudiの開発と商用サポートを進めています。OSSとしての活動も継続しており、定期的にメジャーバージョンがリリースされています。

Q. IcebergやDeltaもUPSERTできるのに、なぜHudi?

A. IcebergやDeltaもMERGEでUPSERTは可能ですが、Hudiは「UPSERT中心のワークロード」に最適化された設計思想を持ちます。MoRストレージタイプは書き込み速度を優先しており、IcebergやDeltaの標準動作とは性質が違います。「毎秒数千のUPSERT」が常態化する業務領域で、性能差が出てきます。

Q. SnowflakeからHudiテーブルを読めますか?

A. Snowflakeの External Tablesで読み取れますが、Iceberg/Deltaに比べると対応が限定的です。「HudiでデータをためてSnowflakeで読む」構成は現状やや無理筋で、Sparkや Athenaを介する方が素直です。Snowflake中心の組織なら、Iceberg を選ぶのが現実的です。Snowflakeの詳細はSnowflakeとはを参照してください。

Q. CDCならDebeziumと組み合わせるのですか?

A. はい、典型的なパターンです。Debeziumがデータベース(MySQL/Postgres等)のbinlog/WALを読み、Kafkaに流す。Hudi DeltaStreamerがKafkaから読んでHudiテーブルにUPSERTする、というパイプラインがよく構築されます。これにより「業務DBの変更をほぼリアルタイムでレイクに反映する」が実現できます。データ取り込みの選定はEL vs ETLとデータ取り込みツール選定もあわせて参考にしてください。