このトピックでは、さまざまなシナリオで Apache Paimon (Paimon) のプライマリキーテーブルと追加スケーラブルテーブルを最適化する方法について説明します。
制限事項
Paimon テーブルは、Ververica Runtime (VVR) 8.0.5 以降を使用する Realtime Compute for Apache Flink でのみサポートされています。
プライマリキーテーブル
データ書き込み
ほとんどの場合、Paimon テーブルへの書き込み操作は、小さなファイルの圧縮によってブロックされます。テーブルのバケットに多数の小さなファイルが含まれている場合、またはテーブルの changelog-producer パラメーターが lookup に設定されている場合、チェックポイント時に小さなファイルの圧縮を完了する必要があります。圧縮プロセスに長い時間がかかる場合、チェックポイントがタイムアウトし、バックプレッシャーが発生して処理効率に影響を与える可能性があります。
上記の課題に対処するには、次の方法を使用します。
Paimon シンクの並列度を調整する
SQL ヒント を使用して、Paimon シンクの
sink.parallelismパラメーターを構成します。並列度の変更はリソースの使用状況に影響を与える可能性があることに注意してください。チェックポイント間隔を調整する
execution.checkpointing.intervalパラメーターを構成して、チェックポイント間隔を長くします。詳細については、「実行中のデプロイのパラメーターを構成する方法」をご参照ください。重要チェックポイント間隔は、Paimon の データレイテンシ に影響します。データレイテンシとは、書き込まれたデータが使用可能になるまでに必要な時間のことです。ビジネスでより高いデータレイテンシが許容される場合は、チェックポイント間隔を長くして書き込みパフォーマンスを向上させることができます。
最大 3 つのチェックポイントを同時に実行できることを指定する
execution.checkpointing.max-concurrent-checkpoints: 3構成を追加します。これにより、同時チェックポイントでのロングテールの影響が軽減されます。バッチデプロイの実行を検討してください。
Paimon で完全に非同期な圧縮を有効にする
小さなファイルの完全に非同期な圧縮は、チェックポイントをブロックしません。
ALTER TABLE 文 または SQL ヒント を使用して、次のパラメーターを構成することで、完全に非同期な圧縮を有効にできます。
'num-sorted-run.stop-trigger' = '2147483647', 'sort-spill-threshold' = '10', 'changelog-producer.lookup-wait' = 'false'パラメーター
タイプ
デフォルト値
説明
num-sorted-run.stop-trigger
整数
5
バケット内の小さなファイルの数がこのパラメーターの値を超えると、小さなファイルが圧縮されるまで、そのバケットへのデータ書き込みが停止されます。これにより、圧縮が遅いことによる小さなファイルの数の制御不能な増加を防ぎます。小さなファイルの数は、オンライン分析処理 (OLAP) のバッチ消費とアドホッククエリの効率に大きく影響しますが、ストリーム消費への影響は最小限です。
このパラメーターを過度に大きな値に設定すると、小さなファイルの数に関係なくデータ書き込みが続行されます。これにより、リソースが十分な場合にのみ小さなファイルを圧縮でき、完全に非同期な圧縮を実現できます。バケット内の小さなファイルの数を監視するには、Paimon が提供する files テーブル をクエリします。
sort-spill-threshold
整数
該当なし
デフォルトでは、マージソートを使用してメモリ内の小さなファイルを圧縮します。各小さなファイルのソートリーダーは、特定量のヒープメモリを占有します。小さなファイルの数が増えると、ヒープメモリが不足する可能性があります。
このパラメーターを構成して、ヒープメモリの不足を防ぐことができます。小さなファイルの数がこのパラメーターの値を超えると、マージソートは外部ソートに置き換えられます。
changelog-producer.lookup-wait
ブール値
true
changelog-producer パラメーターが lookup に設定されている場合に、チェックポイント時に changelog の生成を待機するかどうかを指定します。changelog の生成には、小さなファイルの圧縮が含まれます。有効な値:
true: changelog の生成を待機します。チェックポイント作成の速度に基づいて処理レイテンシを推定できます。その後、リソースをスケーリングするか、完全に非同期な圧縮に切り替えるかを決定できます。
false: changelog の生成を待機しません。これにより、ファイルの圧縮を完了した同時タスクが後続のデータの処理を続行できるようになり、CPU 使用率が向上し、生成される changelog に影響を与えません。この場合、チェックポイント作成の速度はデータ処理のレイテンシを示していません。
Paimon のファイル形式を変更する
ビジネスがバッチまたはストリーム消費に重点を置いており、OLAP のアドホッククエリを含まない場合は、次のパラメーターを構成してデータファイル形式を変更し、統計収集を無効にします。これにより、書き込み操作の効率が向上します。
'file.format' = 'avro', 'metadata.stats-mode' = 'none'説明テーブルを作成するときに、上記のパラメーターを構成する必要があります。既存のテーブルのデータファイル形式は変更できません。
ローカル一時ファイルのサイズを制限する
SQL ヒント で
write-buffer-spill.max-disk-sizeを指定して、ローカル一時ファイルの最大サイズを制限します。これにより、ディスク容量の過剰な消費を防ぎます。
データ消費
Paimon ソースの並列度を調整する
SQL ヒント を使用して、Paimon ソースの
scan.parallelismパラメーターを構成します。Paimon が提供する読み取り最適化テーブルを使用する
バッチ消費、ストリーム消費のフルスキャンフェーズ、および OLAP のアドホッククエリの際に、Paimon ソーステーブルのパフォーマンスは主に小さなファイルの影響を受けます。Paimon ソーステーブルは小さなファイルからデータをメモリ内で圧縮する必要があり、多数の小さなファイルは圧縮中のマージソートの効率を低下させます。小さなファイルは書き込み操作の効率にも影響します。書き込み効率と消費効率のバランスをとる必要があります。
書き込み効率を向上させるには、完全に非同期な圧縮を有効にする で説明されているようにパラメーターを構成します。最新のデータを使用する必要がない場合は、読み取り最適化テーブル を使用して消費効率を向上させることができます。
ルックアップ結合のキャッシュサイズを制限する
Paimon テーブルのデータをクエリする場合は、SQL ヒント で
lookup.cache-max-disk-size(最大ディスク使用量) とlookup.cache-file-retention(ファイル保持期間) を構成します。これらの設定により、キャッシュされたファイルが過剰なストレージを消費するのを防ぎます。
追加スケーラブルテーブル
データ書き込み
ほとんどの場合、追加スケーラブルテーブルの書き込みパフォーマンスは、シンクの並列度とファイルシステムまたは Object Storage Service (OSS) の帯域幅によって決まります。潜在的なパフォーマンスボトルネックを解消するには、使用するファイルシステムにデータ書き込み用の十分な帯域幅があることを確認します。次に、次の方法を使用して追加スケーラブルテーブルを最適化します。
Paimon シンクの並列度を調整する
SQL ヒント を使用して、Paimon シンクの
sink.parallelismパラメーターを構成します。並列度の変更はリソースの使用状況に影響を与える可能性があることに注意してください。データの偏りを確認する
アップストリームデータは、追加スケーラブルテーブルに書き込まれる前にシャッフルされません。アップストリームデータが大幅に偏っている場合、特定のデータライターのリソース使用率が低くなる可能性があります。これにより、書き込み効率が低下します。この問題を解決するには、
sink.parallelismパラメーターをアップストリームノードの並列度とは異なる値に設定します。Realtime Compute for Apache Flink の開発コンソールでこの構成の効果を確認できます。シンクオペレーターとそのアップストリームノードが異なるサブタスクにある場合、データはシャッフルされます。ローカル一時ファイルのサイズを制限する
SQL ヒント で
write-buffer-spill.max-disk-sizeを指定して、ローカル一時ファイルの最大サイズを制限します。これにより、ディスク容量の過剰な消費を防ぎます。
データ消費
Paimon ソースの並列度を調整する
SQL ヒント を使用して、Paimon ソースの
scan.parallelismパラメーターを構成します。データソートを使用する
データの順序は、バッチ処理と OLAP のアドホッククエリの効率に大きく影響します。データソートを使用して、追加スケーラブルテーブルのクエリ効率を向上させることができます。データソートを使用するには、必要な構成を完了する必要があります。詳細については、「データ管理の構成」をご参照ください。また、Flink デプロイをバッチモードで実行し、[エントリポイントのメイン引数] フィールドのパラメーターを構成する必要があります。
たとえば、パーティション内のデータを date フィールドと type フィールドに基づいてソートする場合、[エントリポイントのメイン引数] フィールドに次の構成を追加します。
compact --warehouse 'oss://your-bucket/data-warehouse' --database 'your_database' --table 'your_table' --order_strategy 'zorder' --order_by 'date,type' --partition 'dt=20240311,hh=08;dt=20240312,hh=09' --catalog_conf 'fs.oss.endpoint=oss-cn-hangzhou-internal.aliyuncs.com' --catalog_conf 'fs.oss.endpoint=oss-cn-beijing-internal.aliyuncs.com' --table_conf 'write-buffer-size=256 MB' --table_conf 'your_table.logRetentionDuration=7 days'次の表にパラメーターを示します。
パラメーター
説明
warehouse
Paimon テーブルを含むカタログが属するデータウェアハウスを含む OSS ディレクトリ。
database
Paimon テーブルを含むデータベースの名前。
table
Paimon テーブルの名前。
order_strategy
Paimon テーブルのデータのソートに使用する戦略。有効な値:
zorder: フィルターフィールドの数が 5 未満の範囲クエリに推奨されます。
hilbert: フィルターフィールドの数が 5 以上の範囲クエリに推奨されます。
order: フィルターに等価条件のみが含まれている場合に推奨されます。
order_by
データをソートする基準となる列。複数の列はコンマ (,) で区切ります。
partition
ソートするパーティション。複数のパーティションはセミコロン (;) で区切ります。テーブルがパーティション化されていない場合は、このパラメーターを無視します。
catalog_conf
Paimon テーブルを含むカタログに構成されている WITH 句のパラメーター。各パラメーターを別の行に指定します。
table_conf
Paimon テーブルの一時的な構成。この構成は SQL ヒント と同等です。各パラメーターを別の行に指定します。