DPU の容量計画のモニタリング - AWS Glue

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

DPU の容量計画のモニタリング

AWS Glue でジョブメトリクスを使用すると、AWS Glue ジョブをスケールアウトするために使用できるデータ処理単位 (DPU) の数を予測できます。

プロファイルされたコード

次のスクリプトは、428 個の gzip で圧縮された JSON ファイルを含む Amazon Simple Storage Service (Amazon S3) パーティションを読み取ります。このスクリプトは、マッピングを適用してフィールド名を変更し、Apache Parquet 形式に変換して Amazon S3 に書き込みます。You provision 10 DPUs as per the default and execute this job.

datasource0 = glueContext.create_dynamic_frame.from_options(connection_type="s3", connection_options = {"paths": [input_path], "useS3ListImplementation":True,"recurse":True}, format="json") applymapping1 = ApplyMapping.apply(frame = datasource0, mappings = [(map_spec]) datasink2 = glueContext.write_dynamic_frame.from_options(frame = applymapping1, connection_type = "s3", connection_options = {"path": output_path}, format = "parquet")

AWS Glue コンソールでプロファイルされたメトリクスを可視化する

Job Run 1: In this job run we show how to find if there are under-provisioned DPUs in the cluster. AWS Glue でのジョブ実行機能は、アクティブに実行されているエグゼキュターの合計数完了したステージの数必要なエグゼキュターの最大数を表示します。

必要なエグゼキュターの最大数は、実行中のタスクと保留中のタスクの合計数を加算し、エグゼキュターごとのタスクで除算することによって算出されます。この結果は、現在の負荷に対応するために必要なエグゼキュターの合計数の尺度となります。

一方、アクティブに実行されているエグゼキュターの数は、アクティブな Apache Spark タスクで実行されているエグゼキュターの数を測定します。ジョブが進行するにつれて、必要なエグゼキュターの最大数は変化し、保留中のタスクキューが減るため通常はジョブの終わりに向かって減少します。

The horizontal red line in the following graph shows the number of maximum allocated executors, which depends on the number of DPUs that you allocate for the job. In this case, you allocate 10 DPUs for the job run. 1 つの DPU がマスター用に予約されています。Nine DPUs run two executors each and one executor is reserved for the Spark driver. Spark ドライバーはアプリケーションマスター内で実行されます。そのため、割り当てられるエグゼキュターの最大数は、2*9 - 1 = 17 です。


        アクティブなエグゼキュターと必要なエグゼキュターの最大数を示すジョブメトリクス。

グラフが示すとおり、必要なエグゼキュターの最大数はジョブの開始時に 107 から始まりますが、アクティブなエグゼキュターの数は 17 のままです。This is the same as the number of maximum allocated executors with 10 DPUs. The ratio between the maximum needed executors and maximum allocated executors (adding 1 to both for the Spark driver) gives you the under-provisioning factor: 108/18 = 6x. You can provision 6 (under provisioning ratio) *9 (current DPU capacity - 1) + 1 DPUs = 55 DPUs to scale out the job to run it with maximum parallelism and finish faster.

AWS Glue コンソールは、詳細なジョブメトリクスを、元の割り当てられるエグゼキュターの最大数を表す静的な線として表示します。コンソールは、メトリクスのジョブ定義からから割り当てられるエグゼキュターの最大数を計算します。By constrast, for detailed job run metrics, the console computes the maximum allocated executors from the job run configuration, specifically the DPUs allocated for the job run. 個々のジョブ実行のメトリクスを表示するには、ジョブ実行を選択して、[実行メトリクスの表示] を選択します。


        ETL データ移動を示すジョブメトリクス。

Amazon S3読み取りおよび書き込みされた バイトを見ると、ジョブが Amazon S3 からのデータをストリーミングして並列に書き出すことに 6 分すべてを消費していることがわかります。All the cores on the allocated DPUs are reading and writing to Amazon S3. 必要なエグゼキュターの最大数 107 は、入力 Amazon S3 パス内のファイル数—428 とも一致します。各エグゼキュターは、4 つの Spark タスクを起動し、4 つの入力ファイルを処理します (gzip で圧縮された JSON)。

最適な DPU 容量を決定する

Based on the results of the previous job run, you can increase the total number of allocated DPUs to 55, and see how the job performs. ジョブは 3 分未満で完了します—以前に必要な時間の半分です。この場合、実行時間の短いジョブであるため、ジョブのスケールアウトは直線的ではありません。存続期間の長いタスクまたは多数のタスクを持つジョブ (必要なエグゼキュターの最大数が大きい) は、直線的に近い DPU スケールアウトのパフォーマンス向上から恩恵を受けます。


        Graph showing increasing the total number of allocated DPUs

As the above image shows, the total number of active executors reaches the maximum allocated—107 executors. 同様に、必要なエグゼキュターの最大数が割り当てられるエグゼキュターの最大数を上回ることはありません。必要なエグゼキュターの最大数は、アクティブに実行されているタスクと保留中のタスクの数から計算されるため、アクティブなエグゼキュターの数よりも小さい可能性があります。これは、短期間部分的または完全にアイドル状態になり、まだ停止されていないエグゼキュターが存在する可能性があるためです。


        最大割り当て数に到達しているアクティブなエグゼキュターの合計数を示しているグラフ。

このジョブの実行では、Amazon S3 から並列で読み書きするために 6 倍のエグゼキュターが使用されます。その結果、このジョブの実行では、読み取りと書き込みの両方に使用される Amazon S3 帯域幅が多くなり、早く完了します。

Identify Overprovisioned DPUs

Next, you can determine whether scaling out the job with 100 DPUs (99 * 2 = 198 executors) helps to scale out any further. 次のグラフが示すように、ジョブが完了するまでまだ 3 分かかります。Similarly, the job does not scale out beyond 107 executors (55 DPUs configuration), and the remaining 91 executors are overprovisioned and not used at all. This shows that increasing the number of DPUs might not always improve performance, as evident from the maximum needed executors.


          Graph showing that job performance does not always increase by increasing the number of DPUs.

時間の差を比較する

The three job runs shown in the following table summarize the job execution times for 10 DPUs, 55 DPUs, and 100 DPUs. You can find the DPU capacity to improve the job execution time using the estimates you established by monitoring the first job run.

ジョブ ID DPUs の数 実行時間
jr_c894524c8ef5048a4d9... 10 6 分.
jr_1a466cf2575e7ffe6856... 55 3 分.
jr_34fa1ed4c6aa9ff0a814... 100 3 分.