パフォーマンスが 30% 向上しました。Apache Hudiに基づくKangaroo Cloudデータスタックのパフォーマンス最適化の実践的な分析

Apache Hudi は、企業が大量のデータをより適切に管理および分析できるようにするオープン ソースデータ レイク ソリューションであり、効率的なデータ更新とクエリをサポートします。また、さまざまなデータ圧縮および保存形式、インデックス作成機能も提供するため、企業のデータ ウェアハウスの実践に、より柔軟で効率的なデータ処理方法が提供されます。

金融分野では、企業は Hudi を使用して、リアルタイムでクエリや更新が必要な大量の金融取引データを処理できます。電子商取引ビジネスでは、企業は Hudi を使用して注文データを追跡し、注文をリアルタイムで更新およびクエリできます。物流およびサプライ チェーン管理において、Hudi は企業が大量の物流データをリアルタイムで処理および更新し、データの一貫性と信頼性を確保できるように支援します。

Kangaroo Cloud Data Stack は、ワンストップのビッグデータ基本ソフトウェアとしてストック データの移行レイクへのデータの移行、 Apache Hudi に基づくファイル管理などの完全なサポート機能を顧客に提供します。この過程で、私は Hudi のパフォーマンス最適化に関する経験を蓄積してきました。この記事を通じてそれを皆さんと共有できればと思っています。

Hudi 原理の簡単な分析

Apache Hudi は、オープン ソースのデータ レイク ソリューションであり、 Hadoop とSparkのテクノロジー スタックに基づいて構築されており、Flink やTrinoなどのさまざまなコンピューティング エンジンに拡張されています。Apache Hudi の主な目的は、大規模なデータ セットを管理および処理するための、効率的でスケーラブルで信頼性の高いデータ レイク ソリューションを提供することです。

Hudi のコア実装は、データ コレクションを複数のデータ ファイルに分割し、各データ ファイルのデータ バージョンとインデックス情報を維持することによって、増分データ更新とクエリ操作をサポートすることです。以下の図に示すように、ユーザーがデータを更新する必要がある場合、Hudi は更新されたデータを新しいデータ ファイルに書き込み、コピーオンライト操作を通じて元のデータ ファイルにデータをコピーします。新しいデータ ファイルに追加され、対応するデータ レコードが新しいデータ ファイルで更新されます。

同時に、Hudi はデータ バージョンとインデックス情報を更新し、ユーザーがデータ バージョンと一意の識別子に基づいて最新のデータ レコードにアクセスできるようにします。ユーザーがデータをクエリする必要がある場合、Hudi はインデックス情報を使用してデータ レコードを見つけ、最新のデータ レコードを返します。

ファイル

Hudi の読み取り時のマージ モードでは、クエリ時に元のデータと更新されたデータをマージすることによって更新操作が実装されます。具体的には、書き込まれる新しいデータがある場合、Hudi は新しいデータを新しいログ ファイルに追加し、新しいファイルの情報をメタデータ ファイルに記録します。データをクエリするとき、Hudi はすべてのデータ ファイルをマージしてビューを生成し、そのビューをクエリします。

Hudi は、クエリ時に更新が必要なデータをマージするだけでよく、書き込み時にマージする必要がないため、書き込みによるパフォーマンスのオーバーヘッドを回避し、高速な更新操作を実現できます。

Apache Hudi は、データの書き込み時に新しいバージョンを作成し、データの読み取り時にすべてのバージョンのデータをマージしてビューを生成します。ビューでは、各データ レコードは 1 回だけ表示され、最新バージョンであるため、読み取り操作には元のデータを変更せずにビュー内のデータのみが含まれることが保証され、読み取りと書き込みの分離が実現されます

複数のバージョンで同時実行制御を実装することで、Hudi はデータの一貫性を確保しながら読み取り操作のパフォーマンスを向上させることができ、またデータの信頼性とスケーラビリティも確保できます。

Hudi 最適化の実践

以下では、Kangaroo Cloud Data Stack の実践経験に基づいたHudi のパフォーマンスの最適化について紹介します。

複数のインデックスのサポート

Hudi は、データ収集を複数のデータ ファイルに分割し、各データ ファイルのデータ バージョンとインデックス情報を維持して、増分データ更新とクエリ操作をサポートします。次の図に示すように、インデックスを構築すると、生成されたメタデータを使用して、クエリに必要なデータの場所をすばやく見つけることができます。これにより、ファイル システムからの不要なデータのスキャンや読み取りが削減または回避され、IO オーバーヘッドが削減され、クエリ効率が大幅に向上します。Hudi はすでにいくつかの異なるインデックス作成テクノロジをサポートしており、インデックス作成の実装を継続的に改善および追加しています。

Kangaroo Cloud Data Stack は、ユーザーが Hudi テーブルを作成するときに使用するインデックス タイプ ( SIMPLE、 BLOOM FILTER、BUCKETなどのタイプを含む) を設定できるようにします。Hudiは書き込み処理中にインデックス情報を寄木細工ファイルまたは外部ストレージに書き込み、読み取り時にはアプリケーションがこの情報に基づいて比較および判断し、不要なデータファイルをスキップします。

ファイル

Hudi は、バージョン 0.11.0 でマルチモード インデックスとしてMetadataTableを導入しました。MetadataTable を使用してメタデータ情報を要約すると、アプリケーションはファイルのリスト操作(オブジェクト ストレージでは非常に時間がかかります)のファイル システム呼び出しを回避し、ファイルの直接読み取りを回避できます。 parquet ファイル内のフッター情報により、クエリのパフォーマンスが大幅に向上します。

Kangaroo クラウド データ スタックは、ユーザーがテーブルの作成時にマルチモード インデックスを有効にし、データの書き込み中にファイルのインデックス情報を MetadataTable に書き込むことをサポートします。DataStack は、書き込みが依然として低レイテンシ状態であることを保証するために、非同期方法での MetadataTable の構築もサポートしています。その後、MetadataTable がバックグラウンド アプリケーションによってオフラインで生成され、読み取りパフォーマンスが向上します。

MetadataTable はベース ファイルに記録された列統計/ブルームフィルターなどの情報に依存しているため、読み取り時のマージ モードでログ ファイルの情報を MetadataTable に保存する方法はなく、オープン ソース フレームワークはファイルの実装にそれを使用しません。フィルタリング。

ただし、ベース ファイルとログ ファイルが同じ fileId を共有していることを考慮して、Kangaroo Cloud テクノロジー チームはデータ スタック内で変換を行いました。つまり、MetadataTable を通じてベース ファイルを取得した後、fileId に従ってログ ファイルをフィルタリングし、不要なファイル ID を回避します。読む。この変更により、読み取り時のマージ モードに書き込み時のコピー モードと同じフィルタリング効果が得られることが確認されています。

ファイルレイアウトを最適化する

ビッグ データ ストレージでは、ファイル レイアウトの最適化は重要なパフォーマンス最適化手法です。その主な目的は、データの書き込み時に特定のルールに従って記憶媒体にデータを配置し、データの読み取りと処理の効率を向上させることです。ファイル レイアウトの最適化は、タイムスタンプの並べ替え、パーティションの並べ替え、ファイルの結合など、さまざまな方法で実行できます。

Hudi は、クラスタリングと呼ばれるファイル レイアウト最適化手法を提供します。これを使用して、小さなファイルを大きなファイルにマージして、クエリ エンジンがスキャンする必要があるファイルの総数を減らしたり、スペース充填曲線などの概念を使用してデータ レイクに適応したりすることができます。レイアウトそして、クエリによって読み取られるデータの量を削減します。クラスタリングを使用すると、同じクエリ特性を持つデータを複数の隣接するファイルに配置し、クエリ中にインデックス情報に従ってフィルタリングできます。これにより、読み取られるファイルの数が効果的に削減され、コンピューティング コストが削減されます。

Kangaroo Cloud Data Stackは、ユーザーがファイルレイアウトを調整しやすいように視覚的なページを提供し、ユーザーはソート戦略、ソートフィールド、フィルタ条件などを自由に設定して最適化することができます。Hudi は複数のバージョンを使用してファイルを整理するため、ユーザーは最適化タスクが実行中の読み取りタスクに影響を与えることを心配する必要はありません。最適化が完了すると、新しい読み取りタスクは新しいレイアウトによってもたらされる効率の向上を享受できます。

ファイル

新機能を探索する

Hudi を実装する過程で、Kangaroo Cloud Data Stack は実践コミュニティでの新しい機能や機能も積極的に追跡しています。

Hudi 0.13.0 では、Hudi は「最適化されたレコード読み込み処理」機能を実装しました。追加のコピーと逆シリアル化を避けるために、2 つのパラメーター park.datasource.write.record.merger.impls=org.apache.hudi.HoodieSparkRecordMerger と parker.logfile.data.block.format=parquet を設定することで、書き込み操作でレコードを処理します。ライフサイクル全体を通じて一貫した方法で。

Kangaroo Cloud Stack はこの機能をテストして導入しており、検証の結果、更新パフォーマンスが以前のバージョンと比較して約 20% 向上しており、これはコミュニティの説明と一致しています。さらに、ナンバー スタックは、hudi 0.13.0 で導入されたデータを書き込むディスラプター ロックフリー メッセージ キューの新機能も参照します。これには、hoodie.write.executor.type = DISRUPTOR およびhoodie.write.executor.disruptor.wait を設定します。 Strategy = BUSY_SPIN_WAIT パラメータを前述の最適化された構成と組み合わせることで、全体的な更新パフォーマンスが 30% 以上向上しました。

要約する

Apache Hudi の利点は、増分データ処理をサポートし、データの一貫性と信頼性が高く、データ処理とクエリの効率を向上させるさまざまなパフォーマンス最適化テクノロジを提供し、優れたパフォーマンスとスケーラビリティを備えていることです。

Hudi の実装プロセスにおいて、 Kangaroo Cloud Data Stackチームは、Hudi のさまざまなインデックスを検証し、ファイル構成の最適化機能を適用し、共通のチューニング パラメーターを要約して、企業に信頼性が高く、効率的でスケーラブルなデータ レイク構築を提供しました蓄積された多くの経験は、企業がデータをより適切に管理および分析し、ビジネス上の意思決定の精度と効率を向上させるのに役立ちます。

「Dutstack 製品ホワイトペーパー」: https://www.dtstack.com/resources/1004?src=szsm

「データ ガバナンス業界実践ホワイト ペーパー」ダウンロード アドレス: https://www.dtstack.com/resources/1001?src=szsm Kangaroo Cloud のビッグデータ製品、業界ソリューション、顧客事例について詳しく知りたい、相談したい場合は、 Kangaroo Cloud 公式 Web サイトにアクセスしてください: https://www.dtstack.com/?src=szkyzg

同時に、ビッグデータのオープンソース プロジェクトに興味のある学生は、最新のオープンソース テクノロジー情報を交換するために「Kangaroo Cloud Open Source Framework DingTalk Technology qun」に参加することを歓迎します。qun 番号: 30537511、プロジェクト アドレス: https: // github.com/DTStack

{{名前}}
{{名前}}

おすすめ

転載: my.oschina.net/u/3869098/blog/10084152