Hudi の仕組み - Amazon EMR

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

Hudi の仕組み

Amazon で Hudi を使用する場合EMR、Spark データソースAPIまたは Hudi DeltaStreamer ユーティリティを使用してデータセットにデータを書き込むことができます。Hudi は、basepath の下で、従来の Hive テーブルに似たパーティション分割されたディレクトリ構造にデータセットを編成します。これらのディレクトリ内のファイルとしてのデータのレイアウト方法の詳細は、選択したデータセットタイプによって異なります。書き込み時コピー (CoW) または読み取り時マージ (MoR) を選択できます。

データセットタイプにかかわらず、データセット内の各パーティションは basepath に対する partitionpath によって一意に識別されます。各パーティション内で、レコードは複数のデータファイルに分散されます。詳細については、Apache Hudi ドキュメントの「File management」を参照してください。

Hudi の各アクションには、対応するコミットがあり、インスタントと呼ばれる単調に増加するタイムスタンプで識別されます。Hudi は、データセットに対して実行された一連のすべてのアクションをタイムラインとして保持します。Hudi は、タイムラインを使用して、読み取り側と書き込み側のスナップショット分離を提供し、前の時点にロールバックできるようにします。Hudi が記録するアクションとアクションの状態の詳細については、Apache Hudi ドキュメントの「タイムライン」を参照してください。

データセットストレージタイプについて: 書き込み時にコピーおよび読み取り時にマージ

Hudi データセットを作成するときに、データセットが書き込み時コピーであるか読み取り時マージであるかを指定します。

  • 書き込み時コピー (CoW) – データは列形式 (Parquet) で保存され、更新ごとに書き込み中にファイルの新しいバージョンが作成されます。CoW はデフォルトのストレージタイプです。

  • 読み取り時マージ (MoR) – データは、列形式 (Parquet) 形式と行形式 (Avro) の組み合わせを使用して保存されます。更新は、行形式の差分ファイルに記録され、必要に応じて圧縮されて、新しいバージョンの列形式のファイルが作成されます。

CoW データセットでは、レコードが更新されるたびに、そのレコードを含むファイルが更新された値で書き換えられます。MoR データセットでは、更新があるたびに、Hudi によって変更されたレコードの行のみが書き込まれます。MoR は、読み取りが少なく書き込みまたは変更が多いワークロードに適しています。CoW は、頻繁に変更されないデータの読み取りが多いワークロードに適しています。

Hudi は、データにアクセスするための 3 つの論理ビューを提供します。

  • 読み取り最適化ビュー – CoW テーブルからの最新のコミットされたデータセットと、MoR テーブルからの最新の圧縮されたデータセットを提供します。

  • 増分ビュー – CoW データセットから 2 つのアクション間の変更ストリームを提供し、ダウンストリームジョブにフィードし、抽出、変換、ロード (ETL) ワークフローを行います。

  • リアルタイムビュー – 列形式のファイルと行形式のファイルをインラインでマージすることで、MoR テーブルからの最新のコミットされたデータを提供します。

読み取り最適化ビューをクエリすると、クエリからすべての圧縮されたデータが返されますが、このデータには最新の差分コミットは含まれていません。このデータをクエリすると、読み取りパフォーマンスは向上しますが、最新のデータは省かれています。リアルタイムビューをクエリすると、圧縮されたデータが Hudi によって読み取り時に差分コミットにマージされます。最新のデータがクエリに使用可能になりますが、マージのコンピューティングオーバーヘッドにより、クエリのパフォーマンスが低下します。圧縮されたデータまたはリアルタイムデータのいずれかをクエリする機能では、クエリ時にパフォーマンスと柔軟性のどちらを優先させるかを選択できます。

ストレージタイプ間での優先項目の選択の詳細については、Apache Hudi ドキュメントの「Storage Types & Views」を参照してください。

Hudi は MoR のために、Hive Metastore に 2 つのテーブルを作成します。ひとつは読み込み最適化ビューで使用するための、ユーザーが指定したテーブルです。もうひとつはリアルタイムビューで使用するための、同名テーブルの末尾に _rt が付与されたテーブルです。両方のテーブルをクエリできます。

メタストアへの Hudi データセットの登録

Hive メタストアに Hudi テーブルを登録する場合、他のテーブルと同様に Hive、Spark、SQLまたは Presto を使用して Hudi テーブルをクエリできます。さらに、Hive と Spark を設定して AWS Glue データカタログをメタストアとして使用すると、Hudi を AWS Glue と統合できます。MoR テーブルの場合、Hudi はデータセットをメタストアの 2 つのテーブルとして登録します。それらは、指定した名前のテーブル (読み取り最適化ビュー) と、同じ名前で _rt を付加したテーブル (リアルタイムビュー) です。

Spark を使用して Hudi データセットを作成するときに、Hudi テーブルを Hive メタストアに登録します。そのためには、HIVE_SYNC_ENABLED_OPT_KEY オプションを "true" に設定し、他の必要なプロパティを指定します。詳細については、「Hudi データセットを操作する」を参照してください。さらに、hive_sync_tool コマンドラインユーティリティを使用して、Hudi データセットを個別にテーブルとしてメタストアに登録できます。