翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
計画オーバーヘッドを最小限に抑える
Apache Spark で説明したように、Spark ドライバーは実行プランを生成します。その計画に基づいて、タスクは分散処理のために Spark エグゼキュターに割り当てられます。ただし、小さなファイルが多数ある場合や、 に AWS Glue Data Catalog 多数のパーティションが含まれている場合、Spark ドライバーはボトルネックになる可能性があります。計画オーバーヘッドが高いことを特定するには、次のメトリクスを評価します。
CloudWatch メトリクス
CPU ロードとメモリの使用率をチェックして、次の状況を確認します。
-
Spark ドライバーのCPU負荷とメモリ使用率は高いと記録されます。通常、Spark ドライバーはデータを処理しないため、CPU負荷とメモリの使用率が急増することはありません。ただし、Amazon S3 データソースの小さなファイルが多すぎる場合、すべての S3 オブジェクトを一覧表示し、多数のタスクを管理すると、リソース使用率が高くなる可能性があります。
-
Spark エグゼキュターで処理が開始されるまでに長いギャップがあります。次のスクリーンショット例では、 AWS Glue ジョブが 10:00 に開始されたにもかかわらず、Spark エグゼキュターのCPUロードが 10:57 まで低すぎます。これは、Spark ドライバーが実行プランの生成に時間がかかる可能性があることを示します。この例では、Data Catalog 内の多数のパーティションを取得し、Spark ドライバー内の多数の小さなファイルを一覧表示するのに時間がかかります。
Spark UI
Spark UI の ジョブ タブで、送信日時を確認できます。次の例では、ジョブが 10:00:00 に開始されたにもかかわらず、Spark ドライバーは 10:56:46 に AWS Glue job0 を開始しました。
タスク (すべてのステージ): 成功/合計時間をジョブタブで確認することもできます。この場合、タスクの数は として記録されます58100
。Parallelize tasks ページの Amazon S3 セクションで説明されているように、タスクの数は S3 オブジェクトの数にほぼ対応しています。つまり、Amazon S3 には約 58,100 個のオブジェクトがあります。
このジョブとタイムラインの詳細については、ステージタブを参照してください。Spark ドライバーでボトルネックが発生した場合は、次の解決策を検討してください。
-
Amazon S3 のファイルが多すぎる場合は、並列処理タスクページの「パーティションが多すぎます」セクションにある過剰な並列処理に関するガイダンスを検討してください。
-
Amazon S3 のパーティションが多すぎる場合は、データスキャン量を減らすページのAmazon S3パーティションが多すぎる」セクションで、過剰なパーティション分割に関するガイダンスを検討してください。パーティションが多い場合はパーティションAWS Glue インデックスを有効にして、Data Catalog からパーティションメタデータを取得する際のレイテンシーを短縮します。詳細については、AWS Glue 「パーティションインデックス を使用したクエリパフォーマンスの向上
」を参照してください。 -
JDBC にパーティションが多すぎる場合は、
hashpartition
値を小さくします。 -
DynamoDB のパーティションが多すぎる場合は、
dynamodb.splits
値を小さくします。 -
ストリーミングジョブのパーティションが多すぎる場合は、シャードの数を減らします。