Apache Hudi は、Hadoop 互換ファイルシステムのデータを更新および削除できるデータレイクフレームワークです。Hudi では、変更されたデータを使用することもできます。
テーブルの種類
Hudi は、次のテーブルの種類をサポートしています。
コピーオンライト
データは Parquet 形式で保存されます。書き込み操作中に更新が行われるたびに、新しいバージョンのファイルが作成されます。
マージオンリード
データは、Parquet などのカラムナーストレージ形式と、Avro などの行ベースのストレージ形式の組み合わせに基づいて保存されます。ベースデータはカラムナーストレージ形式で保存されます。増分データは行ベースのストレージ形式で保存されます。増分データは行ベースのファイルに記録され、必要に応じて圧縮されて新しいバージョンのカラムナーファイルが作成されます。
次の表に、テーブルの種類の違いを示します。
相違点 | コピーオンライト | マージオンリード |
データレイテンシ | 高 | 低 |
クエリレイテンシ | 低 | 高 |
更新コスト (I/O) | 高 (書き込み操作中に更新が行われるたびに、新しいバージョンのファイルが作成されます。) | 低 (更新されたデータはデルタログに追加されます。) |
Parquet ファイルサイズ | 小 | 大 |
書き込み増幅 | 高 | 低 (マージポリシーによって異なります) |
クエリの種類
Hudi は、次の 3 つのクエリの種類をサポートしています。
スナップショットクエリ
特定のコミットの最新のスナップショットをクエリします。マージオンリードテーブルの場合、Hudi はスナップショットクエリ中にカラムナーストレージのベースデータとリアルタイムログデータをオンラインでマージします。コピーオンライトテーブルの場合、Hudi は Parquet 形式の最新バージョンのデータをクエリできます。
コピーオンライトテーブルとマージオンリードテーブルはどちらも、スナップショットクエリをサポートしています。
増分クエリ
特定のコミット後に書き込まれた最新のデータをクエリします。
コピーオンライトテーブルとマージオンリードテーブルはどちらも、増分クエリをサポートしています。
読み取り最適化クエリ
特定のコミットより前に指定された範囲内の最新のデータのみをクエリします。読み取り最適化クエリは、マージオンリードテーブルのスナップショットクエリを最適化したものです。このクエリの種類を使用すると、データクエリの適時性を犠牲にして、ログデータのオンラインマージによって生成されるクエリレイテンシを削減できます。
次の表に、スナップショットクエリと読み取り最適化クエリの違いを示します。
相違点 | スナップショットクエリ | 読み取り最適化クエリ |
データレイテンシ | 低 | 高 |
クエリレイテンシ | マージオンリードテーブルの場合は高 | 低 |
シナリオ
ほぼリアルタイムの取り込み
Hudi を使用して、データの挿入、更新、および削除を行うことができます。Kafka および Log Service から Hudi にログデータをリアルタイムで取り込むことができます。また、データベースのバイナリログに記録されたデータ更新を Hudi にリアルタイムで同期することもできます。
Hudi は、データ書き込みプロセス中に生成されるファイルの形式を最適化して、Hadoop Distributed File System (HDFS) の小さなファイルによって発生する問題を解決します。この点で、Hudi は他の従来のデータレイクソリューションよりも HDFS との互換性があります。
ほぼリアルタイムの分析
Hudi は、Hive、Spark、Presto、Impala など、さまざまなデータ分析エンジンをサポートしています。Hudi は軽量であり、追加のサービスプロセスに依存しません。
増分データ処理
Hudi は増分クエリをサポートしています。Spark Streaming ジョブを実行して、特定のコミット後に書き込まれた最新のデータをクエリできます。Hudi では、HDFS で変更されたデータを使用できます。この消費機能を使用して、既存のシステムアーキテクチャを最適化できます。