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