ApacheHudiアーキテクチャの原則とベストプラクティス



Apache Hudi Architecture Principles



1.フディとは何ですか?

Apache Hudiは、Hadoop Upserts and Incrementalsの略で、HDFS上の大規模な分析データセットのストレージを管理します。 Hudiの主な目的は、取り込みプロセス中のデータ遅延を効率的に削減することです。 Uberによって開発され、オープンソース化されたHDFSの分析データセットは、読み取り最適化テーブルとほぼリアルタイムテーブルの2種類のテーブルを通じてサービスを提供します。



読み取り最適化テーブルの主な目的は、列型ストレージを介してクエリのパフォーマンスを提供することですが、ほぼリアルタイムのテーブルは、リアルタイム(行ベースのストレージと列型ストレージの組み合わせ)クエリを提供します。

Hudiは、Hadoopでの更新、挿入、削除などの操作を実行するために使用されるオープンソースのSparkライブラリです。また、ユーザーは変更されたデータのみを取り込むことができるため、クエリの効率が向上します。他のジョブと同様にさらに水平方向に拡張し、データセットをHDFSに直接保存できます。



2. Hudiはどのように機能しますか?

Hudiは、HDFS上のデータセットに次のプリミティブを提供します

  • 更新の挿入(アップサート)

  • 増分消費



Hudiは、データセットに対して実行されたすべての操作のタイムラインを維持して、データセットの即時ビューを提供します。 Hudiは、データセットをHiveテーブルと非常によく似たベースパスの下のディレクトリ構造に編成します。データセットは複数のパーティションに分割されており、フォルダにはパーティションのファイルが含まれています。各パーティションは、ベースパスを基準にしたパーティションパスによって一意に識別されます。

パーティションレコードは複数のファイルに割り当てられます。各ファイルには、一意のファイルIDとファイルを生成したコミットがあります。更新がある場合、複数のファイルが同じファイルIDを共有しますが、書き込み時のコミットは異なります。

ストレージタイプ -データ処理の保存方法

  • コピーオンライト

  • 純粋な円柱状

  • ファイルの新しいバージョンを作成します

  • 読みながらマージ

  • ほぼリアルタイム

見る -処理データの読み取り方法

最適化されたビューを読む -入力形式として圧縮された列ファイルのみを選択します

  • 寄木細工のファイルクエリのパフォーマンス

  • 500GBの遅延時間は約30分です

  • 既存のHiveテーブルをインポートする

ほぼリアルタイムのビュー

  • 混合およびフォーマットされたデータ

  • 約1〜5分の遅延

  • ほぼリアルタイムのテーブルを提供する

インクリメンタルビュー

  • データセットの変更

  • インクリメンタルプルを有効にする

Hudiストレージレイヤーは3つの異なる部分で構成されています

メタデータ –データセットに対して実行されたすべての操作のメタデータをタイムラインの形式で維持します。これにより、データセットのインスタントビューをベースパスのメタデータディレクトリに保存できます。タイムライン上の操作の種類は次のとおりです。

  • 送信(コミット) 、1つのコミットは、レコードのバッチをデータセットにアトミックに書き込むプロセスを表します。単調に増加するタイムスタンプであるcommitは、書き込み操作の開始を示します。

  • 掃除 、クエリで使用されなくなったデータセット内の古いバージョンのファイルをクリーンアップします。

  • 圧縮 、行ファイルを列ファイルに変換するアクション。

  • インデックス 着信レコードキーをファイルにすばやくマップします(レコードキーがすでに存在する場合)。インデックスの実装はプラグ可能です、 ブルームフィルター -外部システムに依存しないため、デフォルトの構成であり、インデックスとデータは常に一貫しています。 Apache HBase -少数のキーに対してより効率的です。インデックスマーキングプロセス中に数秒節約できる場合があります。

  • データ 、Hudiは2つの異なるストレージ形式でデータを保存します。実際に使用されるフォーマットはプラグイン可能ですが、次の特性が必要です- 読み取りの最適化 列ストレージ形式(ROFormat)、デフォルト値はApache Parquet、書き込み最適化行ベースのストレージ形式(WOFormat)、デフォルト値はApacheAvroです。

3. Hudiが大規模でほぼリアルタイムのアプリケーションにとって重要なのはなぜですか?

Hudiは次の制限に対処します

  • HDFSのスケーラビリティの制限

  • Hadoopでデータをより速く提示する必要がある

  • 既存のデータの更新と削除を直接サポートしていません

  • 高速ETLとモデリング

  • 更新されたすべてのレコードを取得するために、これらの更新が最新の日付パーティションに追加された新しいレコードであるか、古いデータの更新であるかにかかわらず、Hudiではユーザーが最後のチェックポイントタイムスタンプを使用できるようにします。このプロセスでは、ソーステーブル全体をスキャンするクエリを実行する必要はありません。

4. Apache Sparkを使用してデータパイプラインにHudiを使用するにはどうすればよいですか?

4.1Hudiをダウンロードする

$ mvn clean install -DskipTests -DskipITs $ mvn clean install -DskipTests -DskipITs -Dhive11

4.2バージョンの互換性

Hudiは、Spark-2.xバージョンに適したJava8をインストールする必要があります。

Hadoop ハイブ スパーク ビルドコマンド
ApacheHadoop-2.8.4 Apache Hive-2.3.3 スパーク-2。[1-3] .x mvn clean install -DskipTests
ApacheHadoop-2.7.3 ApacheHive-1.2.1 スパーク-2。[1-3] .x mvn clean install -DskipTests

4.3Hudiデータセットの生成

環境変数を設定する

export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64/jre/ export HIVE_HOME=/var/hadoop/setup/apache-hive-1.1.0-cdh5.7.2-bin export HADOOP_HOME=/var/hadoop/setup/hadoop-2.6.0-cdh5.7.2 export HADOOP_INSTALL=/var/hadoop/setup/hadoop-2.6.0-cdh5.7.2 export HADOOP_CONF_DIR=$HADOOP_INSTALL/etc/hadoop export SPARK_HOME=/var/hadoop/setup/spark-2.3.1-bin-hadoop2.7 export SPARK_INSTALL=$SPARK_HOME export SPARK_CONF_DIR=$SPARK_HOME/conf export PATH=$JAVA_HOME/bin:$HIVE_HOME/bin:$HADOOP_HOME/bin:$SPARK_INSTALL/bin:$PATH

4.4APIサポート

DataSource APIを使用すると、Hudiデータセットの読み取りまたは書き込みをすばやく開始し、RDDAPIを使用してわずか数行のコードでHudiデータセットを操作できます。

5.グッドベストプラクティス

  • 新しいHoodieRecordPayload型を使用し、以前の永続型をCombineAndGetUpdateValue(...)の出力として保持します。それ以外の場合は、前回の送信の送信時間が最新に更新されているため、ダウンストリームの増分ETLでこのレコードが2回カウントされます。

  • 左側の結合には、キーによって保持されているすべてのデータのデータフレームが含まれ、persistent_data.keyが空のレコードが挿入されます。しかし、BloomIndex / metadataが完全に利用されているかどうかはわかりません。

  • HoodieRecordPayloadメタデータから読み取られたHoodieRecordに新しいフラグフィールドを追加して、書き込みプロセス中に古いレコードをコピーする必要があるかどうかを示します。

  • データフレームオプションにフラグを渡して、ジョブ全体に古いレコードのコピーを強制します。

6.フディの利点

  • HDFSのスケーラビリティの制限。

  • Hadoopでのデータの高速表示

  • 既存のデータの更新と削除のサポート

  • 高速ETLとモデリング

7. ApacheHudiとApacheKuduの比較

ApacheKuduはHudiと非常によく似ています。ApacheKuduはPBレベルのデータのリアルタイム分析に使用され、挿入更新もサポートします。

Apache KuduとHudiの主な違いは、KuduはOLTP(オンライントランザクション処理)ワークロードのデータストアとして機能しようとしますが、Hudiはそれをサポートしていないことです。 OLAP(オンライン分析処理)のみをサポートします。

Apache Kuduはインクリメンタルプルをサポートしていませんが、Hudiはインクリメンタルプルをサポートしています。

他にも大きな違いがあります。 Hudiは、HDFS、S3、CephなどのHadoop互換ファイルシステムに完全に基づいており、Hudiには独自のストレージサーバーがありません。 Apache Kuduストレージサーバーは、RAFTを介して相互に通信します。

重いワークフローの場合、HudiはApache Sparkに依存しているため、Hudiは他のSparkジョブと同様に簡単に拡張できます。

8.Hudiの概要

Hudiは、HDFSでのデータ処理の大きなギャップを埋めるため、いくつかのビッグデータテクノロジーとうまく共存できます。 Hudiは、HDFS上で寄木細工の形式のデータに対して挿入/更新操作を実行するために最適に使用されます。

以前の推奨事項:

ビデオ| 58都市内HBaseプラットフォームとエコロジカル建設の実践

カフカを素早く包括的にマスターする方法は? 5000語の吐血